我有一个熊猫df,其列名为 group ,该列由1,2和3这三个值组成。
我正在尝试执行以下if else语句:
if df.group == 1:
(code here)
elif df.group ==2:
(code here)
else:
(code here)
当我尝试运行我的if else循环时,它将引发以下错误: ValueError:系列的真值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。
我是否需要使用np.where代替数据帧上的if else循环,或者是否可以使用if else循环实现此目的?
答案 0 :(得分:2)
您可以这样迭代:
for idx, val in enumerate(df.itertuples()):
if df.loc[idx, 'group'] == 1:
print('1')
elif df.loc[idx, 'group'] ==2:
print('2')
else:
print('3')
使用np.where
参见here
答案 1 :(得分:0)
在您的情况下,df.group是对“组”列中的系列的调用,例如:
df = pd.DataFrame({'group':[1,2,3,1,3,3,3,2,1,1]})
df.group
Out[42]:
0 1
1 2
2 3
3 1
4 3
5 3
6 3
7 2
8 1
9 1
Name: group, dtype: int64
因此,将一系列[1,2,3,1 ... ]
与一个奇异值进行比较是没有意义的。这就是错误要告诉您的内容。
听起来您正在尝试为集合{1,2,3}中的每个值检索列的索引。
在这种情况下,请使用:
[i for i,j in enumerate(df.group) if j == 1]
Out[48]: [0, 3, 8, 9]