我有一個包含 3 列(A、B、C)的數據框。當列= 22 時,我想用列更新C列。我已經編寫了這樣的更新語句,但它正在更新不匹配的行。你能告訴我如何更新數據框中的數據嗎?ABNaNdf = pd.DataFrame(data=[[10,20,30],[11,21,31],[12,22,32]], columns=['A','B','C'])
df.C = df[df.B==22].A
4 回答

幕布斯7119047
TA貢獻1794條經驗 獲得超8個贊
讓我們嘗試一下mask
df.C.mask(df.B==22, df.A,inplace=True)
df
A B C
0 10 20 30
1 11 21 31
2 12 22 12

繁星coding
TA貢獻1797條經驗 獲得超4個贊
這是執行此操作的幾種方法之一,是的,它需要額外的包,但如果您不知道np.where它非常方便。
import numpy as np
df['C'] = np.where(df['B']==22, df['A'], df['C'])

慕容708150
TA貢獻1831條經驗 獲得超4個贊
另一種選擇是使用loc
and?reindex
:
df['C']?=?df.loc[df.B==22,'A'].reindex(df.index).fillna(df['C'])
理想情況下,您可以np.where
在這種情況下使用,但這就是您的代碼不起作用的原因:
下面
df[df.B==22].A
返回:
2????12
您將看到返回值的索引是2
,因此當您設置df.C
(使用括號表示法而不是.
表示法)時,它會更新命名C
為前一個結果的系列,該系列不包含其他索引(但僅包含2),因此其他指標設置為np.nan
此外,強烈建議不要chained indexing
在賦值時使用它,因為它會導致此警告。
添加回答
舉報
0/150
提交
取消