我正在尝试根据使用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()。
任何想法如何做到这一点。尽可能使用分配很重要
致谢
答案 0 :(得分:4)
在进行if x['flag'] == 'y'
时,您没有在任何特定行上建立索引,因此结果将是整个 booleans 系列:
print(x['flag'] == 'y')
0 True
1 False
2 True
3 True
Name: flag, dtype: bool
因此,错误当然是建议您对该系列执行某些归约运算,因为它包含来自所应用条件的多个结果。
还请注意,此结果正是您要获取的结果。任何比较操作都将返回True
或False
,因此添加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')