2016-05-20 16 views
4

apply args引数を使用してデータフレームの行に関数を適用しようとしています。私はmultiplesimilarquestionsを参照してください、しかし、ソリューションを次のように動作していないようです。私はサンプルの例を作成しました。pandasは引数なしの関数を適用します。lambda

ここで私は私が適用された引数を使用しようとすると、しかし

def lambda_divide(row): 
    return row/row.sum(0) 
pij.apply(lambda row: lambda_divide(row), axis=1).head() 
      0   1 
0 1.077353 -0.690463 
1 0.608302 0.583209 
2 -0.724272 -1.665318 
3 -0.735404 -0.606744 
4 -0.033409 -0.162695 

同じ結果を返すために、ラムダのを使用する方法を知っているその列の合計

pij=pd.DataFrame(np.random.randn(500,2)) 
pij.divide(pij.sum(1),axis=0).head() 
      0   1 
0 1.077353 -0.690463 
1 0.608302 0.583209 
2 -0.724272 -1.665318 
3 -0.735404 -0.606744 
4 -0.033409 -0.162695 

で私のデータフレームを分割、それは

pij.apply(np.divide,args=(pij.sum(1))) 

答えて

2

動作しない、完全なエラーは、これは特殊なケースuとパンダが原因であることを示唆しています機能:

4045 
    4046   if isinstance(f, np.ufunc): 
-> 4047    results = f(self.values) 
    4048    return self._constructor(data=results, index=self.index, 
    4049          columns=self.columns, copy=False) 

ValueError: invalid number of arguments 

これはバグのようです。

In [11]: df.div(df.sum(1), axis=0) 
Out[11]: 
      0   1 
0 2.784649 -1.784649 
1 0.510530 0.489470 
2 0.303095 0.696905 
3 0.547931 0.452069 
4 0.170364 0.829636 


この特定のケースでは、div要素を使用することができます

関連する問題