Pandas:Any()All(),带if/els

2024-10-01 13:41:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着在Pandas数据帧上做一个简单的if/else语句。我得到了错误The truth value of a Series is ambiguous.,所以我尝试使用any() all()。使用这些选项只会导致表达式的ifelse部分求值。我的数据如下:

state       district    democrat    republican  totalvotes  votestowin  rwasted
Maine       1           227546.0    164569.0    392115.0    196057.5    -31488.5
Maine       2           159081.0    192878.0    351959.0    175979.5     16898.5
Maryland    1           103622.0    242574.0    346196.0    173098.0    69476.0
Maryland    2           192183.0    102577.0    294760.0    147380.0    -44803.0
Maryland    3           214640.0    115048.0    329688.0    164844.0    -49796.0

我的密码是

for idx,row in data.iterrows():
    if (data['democrat'] >= data['republican']).all():
        data['rwasted'] = data['republican']
    else:
        data['rwasted'] = data['republican'] - data['votestowin']

您可以看到它只计算代码的else部分。有什么办法让它工作吗?为什么它首先返回一个错误呢?这个表达在我看来很直截了当。你知道吗


Tags: the数据pandasdataif错误语句all
2条回答

.all()是应用于整个Series而不是单个row的函数。你在这里混淆视听。要进行逐行比较(如您所愿):

myseries = []
for idx, row in data.iterrows():
    if row['democrat'] >= row['republican']:
        myseries.append(row['republican'])
    else:
        myseries.append(row['republican'] - row['votestowin'])

data['rwasted'] = pd.Series(myseries)

请参阅@9769953的答案,以获得在数据帧中应用它的更简洁的方法,但这与iterrows方法类似

你需要一个面具:

# Set a default value
data['rwasted'] = data['republican'] - data['votestowin']
# Find where it is different
mask = data['democrat'] >= data['republican']
# Set those rows to another value
data['rwasted'][mask] = data['republican']

不需要if else语句,也不需要for循环。您必须考虑数据帧的行和列,而不是单元格。你知道吗

相关问题 更多 >