首页 > 解决方案 > 熊猫系列的真值模棱两可

问题描述

我正在尝试根据另一列值是否在列表中,在 pandas 的数据框中设置一列。我尝试:

df['IND']=pd.Series(np.where(df['VALUE'] == 1 or df['VALUE'] == 4, 1,0))   

但我明白了:系列的真值是模棱两可的。实现该功能的最佳方法是什么:

If VALUE is in (1,4), then IND=1, else IND=0        

标签: pandasnumpy

解决方案


您需要分配else值,然后使用掩码修改它isin

df['IND'] = 0
df.loc[df['VALUE'].isin([1,4]), 'IND'] = 1

对于多个条件,您可以执行以下操作:

mask1 = df['VALUE'].isin([1,4])
mask2 = df['SUBVALUE'].isin([10,40])

df['IND'] = 0
df.loc[mask1 & mask2, 'IND'] = 1

考虑下面的例子:

df = pd.DataFrame({
    'VALUE': [1,1,2,2,3,3,4,4]
})

输出:

    VALUE
0   1
1   1
2   2
3   2
4   3
5   3
6   4
7   4

然后,

df['IND'] = 0
df.loc[df['VALUE'].isin([1,4]), 'IND'] = 1

输出:

    VALUE   IND
0   1        1
1   1        1
2   2        0
3   2        0
4   3        0
5   3        0
6   4        1
7   4        1

推荐阅读