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