groupby
与ffill
和bfill
。themes.groupby('code').apply(lambda x : x.ffill().bfill())
themes.groupby('code').ffill().bfill()
应该可以工作(除非组内的每个值都是 NaN),而且速度甚至更快。 - cs95ffill()
之后你会失去 'code' 列,然后 pandas 会对所有 NaN 运行 bfill()
,而不管 'code'。 - robroc一种方法是在删除空值后创建一个系列。
然后使用 pd.Series.fillna
和 pd.Series.map
:
df = pd.DataFrame({'code': [1, 2, 3, 1, 2, 4],
'name': ['A', np.nan, 'C', np.nan, 'B', 'D']})
s = df.set_index('code')['name'].dropna()
df['name'] = df['name'].fillna(df['code'].map(s))
print(df)
code name
0 1 A
1 2 B
2 3 C
3 1 A
4 2 B
5 4 D