2016-04-07 9 views
3

以下を達成するための最速の方法である:PythonのパンダDATAFRAME更新値efficently

要素があるかどうかを確認するために、私はパンダデータフレーム(N×N個)を使用していると私はそれぞれの行を反復処理したいと、各要素行の平均よりも大きい。

mean_value = df.ix[elementid].mean(axis=0) 

が、各要素を反復処理し、チェック、それは、ネストされたループと> = mean_valueある場合である:それは大きい場合、私は私が使用して平均値を計算1.

に要素の値を変更したいです本当に遅い。

+0

、作るもの、あなたはO(nm)のより良い行うことができると思います。 – Natecat

+0

私は、要素が平均よりも大きい場合に値1を適用するパンダに機能があることを期待しています –

+0

その機能は手作業と全く同じことを行うでしょう。配列のすべての要素を変更しているため、配列のすべての要素にアクセスする必要があります。あなたはそれをより速くすることはできません – Natecat

答えて

6

あなたはまず、行によってmeanを数え、その後geと比較してどこmask1を追加することができます:あなたはすべての要素にアクセスしている

print df 
    a b c 
0 0 1 2 
1 0 1 2 
2 1 1 2 
3 1 0 1 
4 1 1 2 
5 0 0 1 

mean_value = df.mean(axis=1) 
print mean_value 
0 1.000000 
1 1.000000 
2 1.333333 
3 0.666667 
4 1.333333 
5 0.333333 

mask = df.ge(mean_value, axis=0) 
print mask 
     a  b  c 
0 False True True 
1 False True True 
2 False False True 
3 True False True 
4 False False True 
5 False False True 
print df.mask(mask, 1) 
    a b c 
0 0 1 1 
1 0 1 1 
2 1 1 1 
3 1 0 1 
4 1 1 1 
5 0 0 1 
+1

これは 'mask'と'ゲット! – Zero

+0

非常に優雅な解決策+1 – MaxU

+1

最終結果を除いてよく見えます。 'df.mask(df.mean(axis = 1))、1)'? – Alexander

関連する問題