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

遍历多个DataFrame时如何保存分组操作后的修改?

问题:DataFrame分组操作后修改未保存?

我通过for循环遍历DataFrame列表,执行分组求和操作后,原DataFrame并未保存修改结果。

示例代码

首先创建多个测试用DataFrame:

import pandas as pd

df_1 = pd.DataFrame({'col_0' : ['A', 'A', 'A', 'D', 'E'], 'col_1' : ['A', 'B', 'C', 'D', 'E'],'col_2' : [5, 4, 8, 9, 4],'col_3' : [6, 8, 3, 7, 6]})
df_2 = pd.DataFrame({'col_0' : ['A', 'A', 'A', 'D', 'E'], 'col_1' : ['A', 'A', 'B', 'E', 'D'],'col_2' : [4, 9, 6, 7, 4],'col_3' : [4, 5, 6, 8, 4]})
df_3 = pd.DataFrame({'col_0' : ['A', 'A', 'A', 'D', 'E'], 'col_1' : ['A', 'A', 'B', 'E', 'D'],'col_2' : [9, 5, 5, 4, 5],'col_3' : [7, 2, 9, 3, 8]})
df_4 = pd.DataFrame({'col_0' : ['A', 'A', 'A', 'D', 'E'], 'col_1' : ['A', 'C', 'A', 'D', 'E'],'col_2' : [2, 4, 4, 1, 6],'col_3' : [1, 9, 2, 6, 5]})
df_5 = pd.DataFrame({'col_0' : ['A', 'A', 'A', 'D', 'E'], 'col_1' : ['A', 'E', 'A', 'E', 'D'],'col_2' : [4, 7, 5, 0, 1],'col_3' : [2, 6, 5, 4, 2]})
df_6 = pd.DataFrame({'col_0' : ['A', 'A', 'A', 'D', 'E'], 'col_1' : ['A', 'E', 'C', 'A', 'B'],'col_2' : [7, 6, 8, 6, 7],'col_3' : [5, 6, 8, 5, 7]})
df_7 = pd.DataFrame({'col_0' : ['A', 'A', 'A', 'D', 'E'], 'col_1' : ['A', 'D', 'C', 'A', 'B'],'col_2' : [3, 4, 8, 8, 9],'col_3' : [6, 3, 9, 6, 1]})

将DataFrame存入列表:

lista = [df_1, df_2, df_3, df_4, df_5, df_6, df_7]

定义分组函数并执行循环:

def group(df):
    df = df.groupby(['col_0','col_1']).sum()
    return df

for i in lista:
    group(i)

问题现象

循环执行后,调用原df_2仍显示原始数据:

col_0 col_1  col_2  col_3
0      A     A      4      4
1      A     A      9      5
2      A     B      6      6
3      D     E      7      8
4      E     D      4      4

预期结果应为分组求和后的结果:

col_2  col_3
col_0 col_1            
A     A       13      9
      B        6      6
D     E        7      8
E     D        4      4

解决方法

问题核心是:groupby().sum()返回新的DataFrame对象,不会修改原对象。循环中仅调用group(i)但未将结果保存,因此原数据无变化。可以通过以下两种方式保存修改:

  • 方法1:更新列表中的元素
    遍历列表时使用索引,将分组后的结果重新赋值给列表对应位置:

    for idx in range(len(lista)):
        lista[idx] = group(lista[idx])
    
    # 此时lista[1]即为分组后的df_2
    print(lista[1])
    # 若需要更新原变量df_2,可再赋值
    df_2 = lista[1]
    
  • 方法2:直接重新赋值原变量
    如果需要保留原变量名,可直接对每个DataFrame单独处理:

    df_1 = group(df_1)
    df_2 = group(df_2)
    df_3 = group(df_3)
    # ... 依次处理剩余DataFrame
    

补充说明:Pandas的多数数据操作(如分组、过滤、合并等)默认返回新对象,而非原地修改,这是为了避免意外破坏原始数据。groupby().sum()没有inplace=True参数,因此必须通过赋值操作保存结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:25:20