2017-05-12 2 views
2

두 기능을 결합한 aggfunc로 피벗 테이블을 만들고 싶습니다. 나는이두 가지 기능을 결합한 aggfunc가있는 피벗 테이블

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

을 시도하고이 오류를 가지고 :

TypeError: unsupported operand type(s) for -: 'function' and 'function'

내가 문제를 이해하지만, 해결책은 무엇인가?

답변

2

나는 당신이 lambda 필요가 있다고 생각 - 팬더 기능을 가진 솔루션 median + std (때문에 팬더의 기본 ddof=1에 의해, 필요한 변화 ddof=0입니다) :

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

완벽하게 작동합니다. 많은 감사 :) – SGeuer