Python 如何获得groupby中最大值总和的数据帧?
我有这样的数据帧:Python 如何获得groupby中最大值总和的数据帧?,python,pandas,dataframe,Python,Pandas,Dataframe,我有这样的数据帧: base = {"month": [201901, 201901, 201902, 201902, 201902], "cat": ['0101', '0102', '0201', '0201', '0203'], "value": [1, 2, 3, 4, 5]} df = pd.DataFrame.from_dict(base) df month cat value 0 201901
base = {"month": [201901, 201901, 201902, 201902, 201902], "cat": ['0101', '0102', '0201', '0201', '0203'], "value": [1, 2, 3, 4, 5]}
df = pd.DataFrame.from_dict(base)
df
month cat value
0 201901 0101 1
1 201901 0102 2
2 201902 0201 3
3 201902 0201 4
4 201902 0203 5
我需要按月分组,并获得每个类别(cat)的最大值之和。
我不需要这个结果数据框中的cat信息
应该是这样的:
month value
201901 3 # (1+2, from cat 0101 + cat 0102)
201902 9 # (4+5, from the maximum value of cat 0201 + cat 0203)
我可以通过两个步骤达到这个目的,比如:
temp = df.groupby(['month', 'cat']).max()
finaldf = temp.groupby('month').sum()
问题是:有没有其他优雅的方法来实现这一点,使用聚合、idmax或其他方法
提前感谢我们可以删除重复项并汇总:
(df.sort_values(['value']).drop_duplicates(['month','cat'], keep='last')
.groupby('month')['value'].sum()
)
输出:
month
201901 3
201902 9
Name: value, dtype: int64
我看到的唯一“更优雅的方式”是将它写在一行中,如:
df.groupby(['month','cat']).max().groupby('month').sum()
。尽管这个解决方案远远不够优雅(在我看来),但我还是会接受这个答案,因为它提供了一种不同的方法。谢谢