根据条件分配熊猫分配新列

时间:2019-03-26 16:17:14

标签: python pandas

我正在尝试根据使用assign()的条件在熊猫数据框中导出一个新变量。

df = pd.DataFrame({'flag': ['y', 'n', 'y', 'y']})

df.assign(
    flag_n = lambda x: True if x['flag'] == 'y' else False
)

我收到以下错误:

ValueError:系列的真值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。

任何想法如何做到这一点。尽可能使用分配很重要

致谢

3 个答案:

答案 0 :(得分:4)

在进行if x['flag'] == 'y'时,您没有在任何特定行上建立索引,因此结果将是整个 booleans 系列:

print(x['flag'] == 'y')

0     True
1    False
2     True
3     True
Name: flag, dtype: bool

因此,错误当然是建议您对该系列执行某些归约运算,因为它包含来自所应用条件的多个结果。


还请注意,此结果正是您要获取的结果。任何比较操作都将返回TrueFalse,因此添加True if ... else False是多余的。

所以您只需要:

df.assign(flag_n = df['flag'] == 'y')

答案 1 :(得分:2)

您也可以使用map进行此操作:

df.assign(flag_n = df.flag.map({'y': True, 'n': False}))

答案 2 :(得分:1)

df.assign(flag_n=lambda x: x['flag'] == 'y')