簡體   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