python 中的分组数据与 pandas 和

Grouped data in python with pandas and

我用的是python、pandas、numpy。

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

我需要获得以下 table 的累计总数:

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

请告诉我该怎么做? 谢谢!

p.s。我用函数pivot_table,(但结果不是累计总数):

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

pivot 加上 sum,然后是 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,与您指定的完全一样。

使用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)