假設我有一個這樣的資料框:
name address email paid
0 John 123 State St [email protected] 5.00
1 NaN NaN NaN 15.00
2 John NaN NaN 3.00
3 NaN 100 Owen Ave NaN 10.00
當名稱相同時,我想轉發填充地址和電子郵件列,如果名稱是 NaN,則保持該行不變,這樣做后,資料框應如下所示:
name address email paid
0 John 123 State St [email protected] 5.00
1 NaN NaN NaN 15.00
2 John 123 State St [email protected] 3.00
3 NaN 100 Owen Ave NaN 10.00
我試過使用
df[['address', 'email']] = df[df['name'].notna()].groupby('name', sort=False)[['address', 'email']].ffill()
但它像這樣將第 3 行地址更改為 NaN
name address email paid
0 John 123 State St [email protected] 5.00
1 NaN NaN NaN 15.00
2 John 123 State St [email protected] 3.00
3 NaN NaN NaN 10.00
無論如何讓熊貓留下一些行嗎?
uj5u.com熱心網友回復:
在最后一個作業中,您不是僅過濾 NaN 名稱行。相反,您正在為所有行分配分組結果。
這應該可以解決問題:
df.loc[df['name'].notna(),['address', 'email']] = df[df['name'].notna()].groupby('name', sort=False)[['address', 'email']].ffill()
這樣,您只為名稱與 NaN 不同的行分配結果
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/466659.html
