高效的方式利用大熊猫应用多个布尔面膜在一列中设置值
问题描述:
我有一个数据帧(df
)选择某些行和返回多个布尔数组,口罩,如果你喜欢的几个表达式。我想在这个数据框中添加一个新列,并在这些掩码的基础上填充一些简单的整数(“成员”指标)。如下高效的方式利用大熊猫应用多个布尔面膜在一列中设置值
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)
哪里是含有相等大小的数组等
据我所知,有可能不是一个需要改进的代码。然而,当比较更多的条件时,我会在字典中结束更多的布尔数组。
应用所述函数将数据帧并设置这些值在就地解决办法还可以理解的。
答
使用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)
辉煌。确切地说,沿着这些路线。谢谢! – Fourier