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

如何在pandas的ffill()操作中保留分组列subject_id?

解决ffill后丢失subject_id列的问题

我明白你的问题了——在按subject_id分组执行ffill()后,分组列subject_id消失了对吧?这其实是默认的groupby行为导致的,我给你几个简单的解决办法:

问题原因

当你用df2.groupby('subject_id').ffill()时,pandas默认会把分组键subject_id设置为结果的索引(as_index=True),所以它不再作为普通列显示出来了。

解决方法

1. 分组时保留subject_id为列

直接在groupby里设置as_index=False,这样分组键就会一直以列的形式存在:

df2 = df2.groupby('subject_id', as_index=False).ffill()

如果你之前试这个没生效,可以先执行print(df2.columns)确认一下df2在执行这行前确实有subject_id列,可能是之前的步骤里不小心把它弄丢了?

2. 重置索引恢复subject_id

如果还是想用默认的分组设置,那在ffill()之后把索引重置回列就行:

df2 = df2.groupby('subject_id').ffill().reset_index(level='subject_id')

这里用reset_index(level='subject_id')只把分组索引变回列,不会影响其他可能存在的索引。

3. 仅填充需要的列(更精准)

其实subject_id在每个分组里都是固定值,根本不需要填充,我们可以只对其他列执行填充操作:

# 筛选出需要填充的列(排除subject_id)
fill_columns = [col for col in df2.columns if col != 'subject_id']
# 只对这些列按组填充
df2[fill_columns] = df2.groupby('subject_id')[fill_columns].ffill()

这种方式最稳妥,完全不会影响subject_id列的存在和值。

你可以试试这几种方法,应该就能得到包含subject_id列的期望输出了。

内容的提问来源于stack exchange,提问作者The Great

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:36:15