python - 根据 bool 条件在新列中设置值

标签 python pandas plotly

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

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

现在我想执行一个操作,添加一个新列 C,以便当 A >=2 且 B >= 2 时,C 中的每个单元格存储 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将:

Return elements, either from x or y, depending on condition

因此,只需创建您的条件,然后根据条件的结果确定 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)

关于python - 根据 bool 条件在新列中设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51343003/

相关文章:

python - 如何有效地将 pos_tag_sents() 应用于 pandas 数据框

python - 如何在三元绘图中添加数据标签?

python - plotly.figure_factory.create_scatterplot 停止工作?

python - 将一条线上的时间线组合成子图

python - 传递带有非字符串关键字的字典

python - 在 Python 中,为什么函数参数在函数调用之间保持它们的值

python - Pandas groupby 在使用两次应用时复制组

python - Numba 通过影响就地损坏数据

python - 使用 csv.DictReader 进行迭代

python - cumcout groupby --- 如何按组列出