我有几个表达式可以选择数据框中的某些行 (df
) 并返回多个 boolean 数组,如果您愿意,可以掩码。我想向此数据框添加一个新列,并根据这些掩码用普通整数(“成员资格”指示符)填充它。在最直接的方法中,我将使用此代码:
df.assign(membership=3)
df[mask1].membership = 0
df[mask2].membership = 1
df[mask3].membership = 2
这应该会产生一个列 (df["membership"]
),如下所示:
1 0
2 0
3 1
4 1
5 3
Name: membership, dtype: int64
掩码由函数创建(使用数据框中的附加列来创建输出)作为字典,如下所示:
maskDict = {0:mask1, 1:mask2, 2:mask3}
其中 mask(1..3)
是包含 [True,False,...]
等大小的数组
我知道可能不需要改进代码。然而,当比较更多的条件时,我最终会在字典中得到更多的 boolean 数组。
将函数应用于数据框并设置这些值的就地解决方案也将受到赞赏。
最佳答案
使用numpy.select
:
df["membership"] = np.select([mask1, mask2, mask3], [0,1,2], default=3)
如果输入是dict
:
df["membership1"] = np.select(list(maskDict.values()), list(maskDict.keys()), default=3)
关于python - 使用 pandas 应用多个 boolean 掩码以设置列中的值的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46844812/