2 回答

TA貢獻1798條經驗 獲得超7個贊
您可以使用此掩碼對列與列的值Series.isna
使用布爾索引來創建布爾掩碼,基于:map
prev
ac
id
m = df['ac'].isna()
df.loc[m, 'ac'] = df.loc[m, 'prev'].map(df.set_index('id')['ac'])
結果:
? id? ?ac prev
0? a? 123? NaN
1? b? 223? NaN
2? c? 123? ? a
3? d? 223? ? b

TA貢獻1816條經驗 獲得超6個贊
如果我理解正確,您希望使用“id”給出的值填充“ac”列的 nan 值,該值由“prev”列中的相應值指示。如果是這樣,您可以嘗試使用“id”作為索引,以便您可以使用 .loc 訪問您感興趣的行
import pandas as pd
import numpy as np
df = pd.DataFrame({'id': ['a', 'b', 'c', 'd'],
'ac': ['123', '223', np.nan, np.nan],
'prev': [np.nan, np.nan, 'a', 'b']})
df.set_index('id', inplace=True)
to_fill = df.loc[df['ac'].isnull()]
fill_with = df.loc[to_fill['prev'], 'ac'].copy()
fill_with = fill_with.values
df.loc[to_fill.index, 'ac'] = fill_with
最終結果是:
print(df)
ac prev
id
a 123 NaN
b 223 NaN
c 123 a
d 223 b
請注意,如果“id”列沒有重復值,則此代碼有效。希望我有幫助!
添加回答
舉報