2016-07-22 75 views
0

我使用python,pandas,numpy。python與熊貓分組數據和

df = pd.read_csv('data.csv') 
print df.head(7) 

我有數據幀:

name day sum 
A  D1 6 
B  D1 7 
B  D3 8 
A  D10 3 
A  D2 4 
C  D2 6 
A  D1 9 

我需要:

name D1 D2  D3  ... D10 
A  =6+9 =6+9+4 =6+9+4 =6+9+4+...+3 
B  =7 =7  =7+8  =7+8+...+ 
C  =0 =0+6 =0+6  =6+... 

我需要下表獲得與累計:

name D1 D2  D3 ... D10 
A  15 19  19  .... 
B  7  7  15  
C  0  6  6   

請告訴我我怎麼能做到這一點? 謝謝!

p.s.我使用的功能pivot_table,(但結果是不累計):與sum荷蘭國際集團

import pandas as pd 
import numpy as np 
pd.pivot_table(df, values='sum', index=['name'], columns=['day'], aggfunc=np.sum) 

回答

1

使用df.cumsum(軸= 1)

pivotedDf = pd.pivot_table(df, values='sum', index=['name'], columns=['day'], aggfunc=np.sum) 
pivotedDf = pivotedDf[['D1', 'D2', 'D3', 'D10']] # manually sort columns 
pivotedDf.cumsum(axis=1) 
1

pivot,其次是fillna,實際上正是你在問題中指定:

In [18]: df 
Out[18]: 
    name day sum 
0 A D1 6 
1 B D1 7 
2 B D3 8 
3 A D10 3 
4 A D2 4 
5 C D2 6 
6 A D1 9 

In [19]: pd.pivot_table(df, values='sum', index=['name'], columns= ['day'], aggfunc=sum).fillna(0) 
Out[19]: 
day  D1 D10 D2 D3 
name      
A  15.0 3.0 4.0 0.0 
B  7.0 0.0 0.0 8.0 
C  0.0 0.0 6.0 0.0 

例如,15.0 = 6 + 9,正如您指定的那樣。