高效的方式利用大熊猫应用多个布尔面膜在一列中设置值

高效的方式利用大熊猫应用多个布尔面膜在一列中设置值

问题描述:

我有一个数据帧(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) 
+0

辉煌。确切地说,沿着这些路线。谢谢! – Fourier