微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

groupby cumsum 排序的数据框

如何解决groupby 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()

解决方法

在我看来,你所拥有的一切都很好。但是,如果您想将所有内容链接在一起,请先将 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。