对 Pandas 数据透视 table 的列应用聚合函数
Applying aggregate function on columns of Pandas pivot table
我通过在 Z
列中取最大值生成了以下主元 table:
val
X x1 x2
Y y1 y2 y1 y2
ID
a 9 1 5 11
b 8 10 7 6
取最大值 Z
值后,我需要报告 mean(y1,y2)
。所需的 table 是:
val
X x1 x2
Y mean(y1,y2) mean(y1,y2)
ID
a 5 8
b 9 6.5
如何使用 pandas 实现此目的?
我的 MWE:
#!/usr/bin/python
from pandas import DataFrame
import pandas as pd
import numpy as np
data=pd.read_table('data.txt')
pv=data.pivot_table(index=['ID'], columns=['X','Y'], values=['val'], aggfunc=np.max )
print pv
data.txt
:
ID X Y Z val
a x1 y2 z1 1
b x1 y1 z2 2
a x2 y2 z2 3
a x1 y1 z4 4
a x2 y1 z1 5
b x2 y2 z3 6
b x2 y1 z2 7
b x1 y1 z3 8
a x1 y1 z3 9
b x1 y2 z3 10
a x2 y2 z2 11
您可以传递 level
参数和 axis
来计算所需轴级别的 mean
:
In [142]:
pv.mean(level='X', axis=1)
Out[142]:
X x1 x2
ID
a 5 8.0
b 9 6.5
我通过在 Z
列中取最大值生成了以下主元 table:
val
X x1 x2
Y y1 y2 y1 y2
ID
a 9 1 5 11
b 8 10 7 6
取最大值 Z
值后,我需要报告 mean(y1,y2)
。所需的 table 是:
val
X x1 x2
Y mean(y1,y2) mean(y1,y2)
ID
a 5 8
b 9 6.5
如何使用 pandas 实现此目的?
我的 MWE:
#!/usr/bin/python
from pandas import DataFrame
import pandas as pd
import numpy as np
data=pd.read_table('data.txt')
pv=data.pivot_table(index=['ID'], columns=['X','Y'], values=['val'], aggfunc=np.max )
print pv
data.txt
:
ID X Y Z val
a x1 y2 z1 1
b x1 y1 z2 2
a x2 y2 z2 3
a x1 y1 z4 4
a x2 y1 z1 5
b x2 y2 z3 6
b x2 y1 z2 7
b x1 y1 z3 8
a x1 y1 z3 9
b x1 y2 z3 10
a x2 y2 z2 11
您可以传递 level
参数和 axis
来计算所需轴级别的 mean
:
In [142]:
pv.mean(level='X', axis=1)
Out[142]:
X x1 x2
ID
a 5 8.0
b 9 6.5