2017-03-09 246 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