Python 使用pandas应用多个布尔掩码来设置列中的值的有效方法

Python 使用pandas应用多个布尔掩码来设置列中的值的有效方法,python,pandas,dataframe,boolean,Python,Pandas,Dataframe,Boolean,我有几个表达式,它们选择数据帧中的某些行(df),并返回多个布尔数组和掩码(如果您愿意)。我想在这个数据框中添加一个新列,并基于这些掩码用普通整数(“成员”指示符)填充它。在最简单的方法中,我将使用以下代码: df.assign(membership=3) df[mask1].membership = 0 df[mask2].membership = 1 df[mask3].membership = 2 这将产生一列(df[“成员资格”]),如下所示: 1 0 2 0 3 1

我有几个表达式,它们选择数据帧中的某些行(
df
),并返回多个布尔数组和掩码(如果您愿意)。我想在这个数据框中添加一个新列,并基于这些掩码用普通整数(“成员”指示符)填充它。在最简单的方法中,我将使用以下代码:

df.assign(membership=3)
df[mask1].membership = 0
df[mask2].membership = 1
df[mask3].membership = 2
这将产生一列(
df[“成员资格”]
),如下所示:

1    0
2    0
3    1
4    1
5    3
Name: membership, dtype: int64
掩码由函数(使用数据框中的附加列创建输出)创建为字典,如下所示:

maskDict = {0:mask1, 1:mask2, 2:mask3}
其中
掩码(1..3)
是大小相等的数组,包含
[真、假,…]

我知道可能不需要改进代码。然而,当比较更多的条件时,我将在字典中得到更多的布尔数组

一个将函数应用于数据帧并设置这些值的就地解决方案也将受到欢迎

使用:

如果输入是dict:

df["membership1"] = np.select(list(maskDict.values()), list(maskDict.keys()), default=3)

明亮的正是这样。非常感谢。
df["membership1"] = np.select(list(maskDict.values()), list(maskDict.keys()), default=3)