带有aggfunc的数据透视表,它结合了两个功能

时间:2017-05-12 12:27:26

标签: python pandas

我想创建一个带有aggfunc的数据透视表,它包含两个函数。我试过这个

 pivot=pd.pivot_table(data, columns='Genename', values=['Mediancoverage'],index='Componentnr', aggfunc=(np.median - np.std))

并收到此错误:

  

TypeError:不支持的操作数类型 - :'function'和   '功能'

我理解问题,但解决方案是什么?

1 个答案:

答案 0 :(得分:3)

我认为您需要lambda - pandas函数median + std的解决方案(必须更改ddof=0,因为pandas中默认为ddof=1):

aggfunc=lambda x: x.median() - x.std(ddof=0)

与...相同:

aggfunc=lambda x: np.median(x) - np.std(x)

样品:

data = pd.DataFrame({
    'Genename' : ['a','a','b','b', 'b', 'b'],
    'Mediancoverage' : [4, 1, 5, 3, 7, 5],
    'Componentnr' : [1,2,1,2,1,2],        
    })
print (data)
   Componentnr Genename  Mediancoverage
0            1        a               4
1            2        a               1
2            1        b               5
3            2        b               3
4            1        b               7
5            2        b               5
pivot=pd.pivot_table(data, 
                     columns='Genename', 
                     values='Mediancoverage',
                     index='Componentnr',
                     aggfunc=lambda x: x.median() - x.std(ddof=0))

print (pivot)
Genename     a  b
Componentnr      
1            4  5
2            1  3

pivot=pd.pivot_table(data, 
                     columns='Genename', 
                     values='Mediancoverage',
                     index='Componentnr',
                     aggfunc=lambda x: np.median(x) - np.std(x))

print (pivot)
Genename     a  b
Componentnr      
1            4  5
2            1  3