如何在 Python 中有效地按段聚合

How to efficiently aggregate by segments in Python

我正在寻找另一种方法来对“总”分组进行分组。下面是我目前正在做的创建总分组的简化示例。目前,我正在创建一个单独的“总”数据框并将其与原始数据框合并。有没有更好的方法来解决这个问题?

import pandas as pd
df = pd.DataFrame({'new_ren':['new', 'ren', 'new', 'new', 'ren'],
                   'dt':['2022-01-01', '2022-01-01', '2022-02-01', '2022-02-01', '2022-03-01'],
                   'ct':[1, 3, 4, 1, 2]})

# create total grouping
df_tot = df.groupby('dt')['ct'].sum().reset_index()
df_tot['new_ren'] = 'total'

# combined both dataframes
pd.concat([df, df_tot])

您的方法没有任何问题(我会说,对于您当前的问题,它是最直观和可读的)但是这里有另一种方法使用 merge 来获得相同的输出:

out = df.merge(df.groupby('dt', as_index=False).sum('ct').assign(new_ren='total'), how='outer')

输出:

  new_ren          dt  ct
0     new  2022-01-01   1
1     ren  2022-01-01   3
2     new  2022-02-01   4
3     new  2022-02-01   1
4     ren  2022-03-01   2
5   total  2022-01-01   4
6   total  2022-02-01   5
7   total  2022-03-01   2