基于布尔条件在新列中设置值



我有一个数据帧和两个字典,如下所示:

a = pd.DataFrame({'A':[1,2,3],'B':[4,5,6]})
x = {'a':'a'}
y = {'b':'b'}

现在,我想执行一个操作,添加一个新的列C,使C中的每个单元格在a>=2和B>=2时存储x,否则存储y。生成的数据帧应等效于:

a = pd.DataFrame({'A':[1,2,3],'B':[4,5,6], 'C':[{'b':'b'}, {'a':'a'}, {'a':'a'}]})

我尝试了很多不同的方法,但到目前为止都没有成功。这是一个有趣的例子,而实际的数据帧将有许多行和列,可能会使用更复杂的条件。最终目标是通过将可视化所需的所有信息(如标记定义(存储为附加列,为绘图可视化准备数据帧。

提前谢谢。

使用np.where

a['C'] = np.where((a.A >= 2) & (a.B >= 2), x, y)
A  B           C
0  1  4  {'b': 'b'}
1  2  5  {'a': 'a'}
2  3  6  {'a': 'a'}

为了解释这一点,因为您说您的真实数据更复杂,np.where将:

根据条件从x或y返回元素

因此,只需创建条件,然后根据条件的结果确定xy需要什么。如果您有两个以上的可能选项和多种条件,那么您应该查看np.select

为了演示起见,这里是等价的np.select

conds = [(a.A >=2) & (a.B >=2)]
choices = [x]
np.select(conds, choices, default=y)
# array([{'b': 'b'}, {'a': 'a'}, {'a': 'a'}], dtype=object)