gpt4 book ai didi

python - 重复行的累计和

转载 作者:太空宇宙 更新时间:2023-11-04 11:20:32 25 4
gpt4 key购买 nike

所以我在使用 pandas 求累计和时遇到了一些问题。

我有一个这样的数据框:

df = pd.DataFrame({
'Date': ['2018-04-01', '2018-04-01', '2018-04-01', '2018-05-01', '2018-05-01','2018-05-01','2018-04-01','2018-05-01'],
'Category': ['AA', 'AA', 'AA', 'AA', 'AA','AA','AA','AA'],
'Product': ['a', 'a', 'a', 'a', 'a','a','x','x'],
'Volumes': [10,30,40,50,60,10,1,2]})

Date Category Product Volumes
2018-04-01 AA a 10
2018-04-01 AA a 30
2018-04-01 AA a 40
2018-05-01 AA a 50
2018-05-01 AA a 60
2018-05-01 AA a 10
2018-04-01 AA x 1
2018-05-01 AA x 2


也就是说,有些产品在同一日期是重复的,有些是唯一的。

我想用这种方式求累计和:

df = pd.DataFrame({
'Date': ['2018-04-01', '2018-04-01', '2018-04-01', '2018-05-01', '2018-05-01','2018-05-01','2018-04-01','2018-05-01'],
'Category': ['AA', 'AA', 'AA', 'AA', 'AA','AA','AA','AA'],
'Product': ['a', 'a', 'a', 'a', 'a','a','x','x'],
'Volumes': [80,80,80,190,190,190,1,3]})


Date Category Product Volumes
2018-04-01 AA a 80
2018-04-01 AA a 80
2018-04-01 AA a 80
2018-05-01 AA a 200
2018-05-01 AA a 200
2018-05-01 AA a 200
2018-04-01 AA x 1
2018-05-01 AA x 3

其中 80 是 4 月的总和,200 是 4 月和 5 月的总和。

我试过一个简单的

 df.groupby(['Category', 'Product'])['Volumes'].agg(['sum']).reset_index()```


But that doesnt give me the desired output.

Any suggestions?

最佳答案

更新,在 sum 之后使用 cumsum ,然后 merge 返回

s=df.groupby([df['Date'].dt.month,df['Category'],df['Product']])['Volumes'].sum().reset_index()
s['New']=s.groupby(['Category','Product'])['Volumes'].cumsum()
df=df.assign(Date=df.Date.dt.month,Date1=df.Date).merge(s.drop('Volumes',1),on=['Date','Category','Product'])
df
Out[575]:
Date Category Product Volumes Date1 New
0 4 AA a 10 2018-04-01 80
1 4 AA a 30 2018-04-01 80
2 4 AA a 40 2018-04-01 80
3 5 AA a 50 2018-05-01 200
4 5 AA a 60 2018-05-01 200
5 5 AA a 10 2018-05-01 200
6 4 AA x 1 2018-04-01 1
7 5 AA x 2 2018-05-01 3

关于python - 重复行的累计和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56079215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com