繁体   English   中英

pandas - 使用具有 if 条件的另一列的值更新数据框列

[英]pandas - updating a dataframe column with value of another column with if condition

我想更新 ColumnA,如果它在 ColumnC 中有“0”和字符串“pandas”,并且具有平均值 [我存储在 columnB 中]

df['ColumnA'] = df.apply(lambda x: x['ColumnB'] if (x['ColumnA']==0 & x['ColumnC']=='pandas') else x['ColumnA'], axis=1)

我收到此错误

unsupported operand type(s) for &: 'int' and 'str'

请告诉我如何修复它

在您的条件周围加上括号,并在评论中指出,使用 and 代替 & 进行标量比较,例如

((x['ColumnA'] == 0) and (x['ColumnC'] == 'pandas'))

请参阅有关操作顺序的问题- 按位运算符&优先于布尔运算符==

也就是说,您应该考虑使用矢量化操作:

df['ColumnA'] = df['ColumnB'].where(
    ((df['ColumnA'] == 0) & (df['ColumnC'] == 'pandas')),
    df['ColumnA'],
)

在几乎所有情况下,这都比 df.apply 快。

使用and代替&并且还在==测试周围放置括号:

df['ColumnA'] = df.apply(lambda x: x['ColumnB'] if (x['ColumnA']==0) and (x['ColumnC']=='pandas') else x['ColumnA'], axis=1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM