2016-07-22 8 views
0

私はpython、pandas、numpyを使用します。Pythonのグループ化されたデータとパンダと

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

私はDATAFRAME持っている:私は必要

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. 、

sumとINGの
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

pivotfillna続い実際あなたが質問で指定されたまさにを行います:私は機能pivot_table、(しかし、結果は累計ではありません)を使用

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のように、指定する必要があります。

関連する問題