如何将DataFrame分组填充后的更新结果保存回原数据?
解决方案
直接通过分组+批量处理就能实现,不用手动循环分组:
import pandas as pd # 构造你的示例数据 df = pd.DataFrame({ 'id': ['ac2', 'bd4', 'ac2', 'bd4', 'ac2'], 'name': ['canela', 'cheerio', 'canela', 'cheerio', 'canela'], 'treat': ['brownie', '', '', 'cookie', ''], 'snack': ['', 'chips', 'pretzel', '', ''], 'year': ['', '1990', '', '', '2004'] }) # 核心处理逻辑 result = df.groupby('id', as_index=False).apply(lambda x: x.ffill().bfill().iloc[0]) print(result)
运行后输出就是你要的结果:
| id | name | treat | snack | year |
|---|---|---|---|---|
| ac2 | canela | brownie | pretzel | 2004 |
| bd4 | cheerio | cookie | chips | 1990 |
为什么你的原有代码没生效?
gb_df.get_group(i).ffill().bfill()返回的是数据副本,你没有把处理后的结果保存到新变量里,自然不会影响原DataFrame。- 手动循环分组完全没必要,pandas的
groupby配合apply可以批量处理所有分组,代码更简洁效率也更高。
另一种更直接的写法
因为你的数据里每个id对应的每个字段只有一个非空值,还可以直接取每个分组里的非空值:
result = df.groupby('id', as_index=False).agg(lambda x: x.dropna().iloc[0])
内容的提问来源于stack exchange,提问作者codingrainha
相关产品推荐
相关产品推荐

