2017-05-12 14 views
2

2つの機能を組み合わせたaggfuncを使ってピボットテーブルを作成します。私はこの2つの機能を組み合わせた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

関連する問題