You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 18:22:25