【问题标题】:Groupby everything but one column对除一列以外的所有内容进行分组
【发布时间】:2022-07-21 23:29:45
【问题描述】:

我有一个 pandas 数据框,它最初在下面有这些列,并随着程序的继续而增长。

'Branch_ID'、'Region'、'ActualRegion'、'Lease_Id'、'Year'、'Make'、 '型号'、'VIN'、'Plate_Number'、'Full_Name'、'员工编号'、'工作 Title'、'Device Serial Number'、'Blackout since'、'Covered'

目前我有多个与此类似的 groupby 语句。这个例子总结了最后一列中的所有内容,称为 Miles Driven

report = report.groupby(['Branch_ID', 'Region', 'ActualRegion', 'Lease_Id', 
                         'Year', 'Make',  'Model',  'VIN',  
                        'Plate_Number',  'Full_Name', 'Employee Number', 'Job Title',
                      'Device Serial Number', 'Blackout since',  'Covered']).sum().reset_index()

我必须多次执行类似的过程,每次执行时都会添加一个新列。我正在尝试创建一个可重用的函数来简化和消除冗余代码。

我尝试过的;在我的脑海中,上面的代码应该看起来像这样。如果其他列中有重复项,我将汇总一个名为 Miles Driven 的列

columns_to_group = report.columns.difference(['Miles Driven'])

report = report.groupby(columns_to_group).sum().reset_index()

这更优雅,将帮助我创建一个可以显着缩短我的代码的函数,但我尝试了很多方法来获得类似于工作的东西但不能。

上面我得到的错误是

raise ValueError("Grouper and axis must be same length")

如果我打印出 columns_to_group,它与我在上面的 groupby 语句中插入的内容相同。

【问题讨论】:

    标签: python pandas group-by


    【解决方案1】:

    如果我打印出 columns_to_group 它与我插入的内容相同 在上面的 groupby 语句中

    虽然它可能看起来像 list,但它不是,将其转换为 list 并且它应该可以工作。简单的例子

    import pandas as pd
    df = pd.DataFrame({'X':[0,0,1,1],'Y':[1,1,0,0],'Z':[1,10,100,1000]})
    group_cols = df.columns.difference(['Z'])
    df_sum = df.groupby(list(group_cols)).sum().reset_index()
    print(df_sum)
    

    输出

       X  Y     Z
    0  0  1    11
    1  1  0  1100
    

    注意:为简洁起见,我使用了自己的数据样本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-18
      • 2017-01-04
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 2012-12-03
      • 1970-01-01
      相关资源
      最近更新 更多