【发布时间】:2020-11-04 19:01:36
【问题描述】:
col1、col2 和 col3 的每一列都需要以 col4 列为条件进行前向或后向填充。
假设我有一个这样的数据框:
df = pd.DataFrame({'col1':[1,np.nan,3, np.nan,5,np.nan],
'col2':[7, np.nan, 9, np.nan, 11, np.nan],
'col3':[13, 14, 15, 16, np.nan,18],
'col4':[2015, 2015, 2015, 2016, 2016, 2018]})
col1 col2 col3 col4
0 1.0 7.0 13.0 2015
1 NaN NaN 14.0 2015
2 3.0 9.0 15.0 2015
3 NaN NaN 16.0 2016
4 5.0 11.0 NaN 2016
5 NaN NaN 18.0 2018
我正在尝试通过 groupby 来实现这一点。
grouped = df.groupby('col4')
然后我循环遍历组,如果组名满足条件,我会进行填充(向后或向前)并更新数据框。
for name, group in grouped:
if name == 2015:
df[df.col4==name][['col1', 'col2']] = grouped.get_group(name)[['col1', 'col2']].ffill(axis=0)
elif name == 2016:
df[df.col4==name]['col1'] = grouped.get_group(name)['col1'].ffill(axis=0)
df[df.col4==name][['col2', 'col3']] = grouped.get_group(name)[['col1', 'col2']].bfill(axis=0)
else:
df[df.col4==name]['col1', 'col2', 'col3'] = grouped.get_group(name)['col1'].bfill(axis=0)
但是这不起作用并且看起来很冗长。
This post 看起来很相似。
如果有任何建议,我将不胜感激。
【问题讨论】:
-
你能编辑你的问题并把预期的结果放在那里吗?
-
df[df.col4==name][['col1', 'col2']]是索引链接,请改用df.loc[df.col4==name,['col1', 'col2']]。