Pandas df错误-“系列的真值不明确。”在if else循环中

时间:2019-02-21 14:51:41

标签: python pandas

我有一个熊猫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循环实现此目的?

2 个答案:

答案 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]