2017-03-09 212 views
0

我有一个熊猫数据框,我需要计算出每个月的累计总和。累计总和按日期(月)

Date Amount 
2017/01/12 50 
2017/01/12 30 
2017/01/15 70 
2017/01/23 80 
2017/02/01 90 
2017/02/01 10 
2017/02/02 10 
2017/02/03 10 
2017/02/03 20 
2017/02/04 60 
2017/02/04 90 
2017/02/04 100 

累计总和是每天即01-31的尾随总和。但是,有些日子不见了。数据帧应该像

Date Sum_Amount 
2017/01/12 80 
2017/01/15 150 
2017/01/23 203 
2017/02/01 100 
2017/02/02 110 
2017/02/03 140 
2017/02/04 390 

回答

2

如果只需要cumsum通过monthsgroupbysum,然后按转化为month指数的值可以使用:

df.Date = pd.to_datetime(df.Date) 
df = df.groupby('Date').Amount.sum() 
df = df.groupby(df.index.month).cumsum().reset_index() 
print (df) 

     Date Amount 
0 2017-01-12  80 
1 2017-01-15  150 
2 2017-01-23  230 
3 2017-02-01  100 
4 2017-02-02  110 
5 2017-02-03  140 
6 2017-02-04  390 

但是,如果需要,但months and years需要转换到to_period

df = df.groupby(df.index.to_period('m')).cumsum().reset_index() 

区别是在改变df看到tter - 添加不同的年份:

print (df) 
      Date Amount 
0 2017/01/12  50 
1 2017/01/12  30 
2 2017/01/15  70 
3 2017/01/23  80 
4 2017/02/01  90 
5 2017/02/01  10 
6 2017/02/02  10 
7 2017/02/03  10 
8 2018/02/03  20 
9 2018/02/04  60 
10 2018/02/04  90 
11 2018/02/04  100 

df.Date = pd.to_datetime(df.Date) 
df = df.groupby('Date').Amount.sum() 
df = df.groupby(df.index.month).cumsum().reset_index() 
print (df) 
     Date Amount 
0 2017-01-12  80 
1 2017-01-15  150 
2 2017-01-23  230 
3 2017-02-01  100 
4 2017-02-02  110 
5 2017-02-03  120 
6 2018-02-03  140 
7 2018-02-04  390 

df.Date = pd.to_datetime(df.Date) 
df = df.groupby('Date').Amount.sum() 
df = df.groupby(df.index.to_period('m')).cumsum().reset_index() 
print (df) 
     Date Amount 
0 2017-01-12  80 
1 2017-01-15  150 
2 2017-01-23  230 
3 2017-02-01  100 
4 2017-02-02  110 
5 2017-02-03  120 
6 2018-02-03  20 
7 2018-02-04  270