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)
我用的是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)