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”列没有重复值,则此代码有效。希望我有帮助!
添加回答
举报