【问题标题】:groupby cumsum sorted dataframegroupby cumsum 排序数据框
【发布时间】:2021-04-07 14:22:29
【问题描述】:

我想按列对数据框进行分组,然后对按第一列降序排序的另一列应用 cumsum

df1:
id   PRICE  DEMAND
0      120     10
1      232     2
2      120     3
3      232     8
4      323     5
5      323     6
6      323     2

df2:
id   PRICE  DEMAND
0      323     13
1      232     23
2      120     36

我用两条指令来做,但我觉得只需一个总和就可以完成

data = data.groupby('PRICE',as_index=False).agg({'DEMAND': 'sum'}).sort_values(by='PRICE', ascending=False)
data['DEMAND'] = data['DEMAND'].cumsum()

【问题讨论】:

    标签: python pandas dataframe cumsum


    【解决方案1】:

    在我看来,你所拥有的一切都很好。但是,如果您想将所有内容链接在一起,首先是sort,然后是groupbysort=False,这样它就不会改变顺序。然后您可以在组内sumcumsum 生成的系列

    (df.sort_values('PRICE', ascending=False)
       .groupby('PRICE', sort=False)['DEMAND'].sum()
       .cumsum()
       .reset_index())
    
       PRICE  DEMAND
    0    323      13
    1    232      23
    2    120      36
    

    另一个选择是sort 然后cumsum 然后drop_duplicates

    (df.sort_values('PRICE', ascending=False)
       .set_index('PRICE')
       .DEMAND.cumsum()
       .reset_index()
       .drop_duplicates('PRICE', keep='last'))
    
       PRICE  DEMAND
    2    323      13
    4    232      23
    6    120      36
    

    【讨论】:

    • 或者你可以groupby().sum()然后sort_values/sort_index来保存一些排序操作。无论如何,这并不重要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    • 2020-01-25
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多