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

如何修改Pandas分组数据并还原为原DataFrame?

Pandas分组修改数据不生效?看这解决方法

问题根源

你循环里拿到的val是原DataFrame的副本,不是对原数据的引用。修改副本的内容不会同步回原df,所以后续查看分组数据时没有变化。

正确实现:用groupby.apply()

apply()会遍历每个分组,把修改后的分组返回,最后自动合并成完整的DataFrame,完美适配你按不同分组自定义填充的需求。

完整代码示例

import pandas as pd
import numpy as np

d = {'car' : ["Audi", "Audi", "Audi", "BMW", "BMW", "BMW", "FIAT", "FIAT", "FIAT", "FIAT"],
    'year' : [2000, 2001, 1995, 1992, 2003, 2003, 2011, 1982, 1997, 2002]}

df = pd.DataFrame.from_dict(d)
df['new'] = np.nan

def process_group(group):
    key = group['car'].iloc[0]  # 获取当前分组的车型名称
    if key == 'Audi':
        group.loc[group['year'] < 2000, 'new'] = f'new {key}'
    elif key == 'BMW':
        # 这里写BMW的自定义逻辑,示例:给年份小于2000的行赋值
        group.loc[group['year'] < 2000, 'new'] = 'BMW classic'
    elif key == 'FIAT':
        # FIAT的自定义逻辑,示例:给所有行的new列赋值年份+10
        group['new'] = group['year'] + 10
    else:
        group.loc[group['year'] < 2000, 'new'] = 'UNKNOWN'
    return group

# 应用分组处理函数,group_keys=False避免多余的分组索引
df_processed = df.groupby('car', group_keys=False).apply(process_group)

print(df_processed)

代码说明

  • group_keys=False:保持原DataFrame的结构,不会额外添加分组索引列
  • process_group函数:每个分组会传入该函数,你可以在内部根据分组key编写任意自定义逻辑,最后返回修改后的分组
  • 最终df_processed就是所有分组处理完成后的完整DataFrame

验证效果

比如查看Audi分组的修改结果:

print(df_processed[df_processed['car'] == 'Audi'])

会看到1995年的行new列已被填充为new Audi,所有分组的自定义逻辑都已生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:15:32