Pandas中groupby并ffill后如何恢复分组列a?
怎么恢复groupby+ffill后消失的a列?
首先明确:能恢复a列,而且默认情况下数据顺序不会被打乱,下面给几种实用方法:
方法1:直接把原数据的a列加回去
df.groupby('a').ffill()返回的结果其实保留了原始DataFrame的索引,所以直接把原df的a列赋值回去就行:
import numpy as np import pandas as pd df = pd.DataFrame({'a':[1,1,2,2] , 'b': [12,np.nan,14, 13], 'c' : [1, 2, np.nan, np.nan] }) # 执行分组填充 result = df.groupby('a').ffill() # 恢复a列 result['a'] = df['a'] # 可选:调整列顺序回到原来的样子 result = result[['a', 'b', 'c']] print(result)
输出结果:
a b c 0 1 12.0 1.0 1 1 12.0 2.0 2 2 14.0 NaN 3 2 13.0 NaN
方法2:分组时直接保留a列(更省心)
不想事后补列的话,直接在分组操作时带上a列就行:
方式2.1:对整个DataFrame执行分组填充
因为a列在同一组里值都一样,ffill之后不会有变化,所以直接对整个df分组填充,a列会自动保留:
result = df.groupby('a').ffill() print(result)
结果里a列不会消失,和上面的输出一致。
方式2.2:用transform只处理需要填充的列
如果只想给b、c列做ffill,同时保留a列,用transform更直接,还能直接修改原df:
df[['b', 'c']] = df.groupby('a')[['b', 'c']].transform('ffill') print(df)
这样处理完,a列全程都在,数据顺序也和原始数据完全一致。
关于数据顺序的疑问
放心,默认情况下groupby加ffill不会打乱原始数据的顺序。分组只是对每个组内的数据处理,处理完会按照原始数据的索引顺序重新组合结果,你可以对比原df和结果的索引,完全是对应的。
内容的提问来源于stack exchange,提问作者learner
相关产品推荐
相关产品推荐

