2016-04-07 22 views
3
aşağıdaki ulaşmak için en hızlı yolu olduğunu

: eleman isePython Pandalar Dataframe güncelleme değerleri yöneticileriniz

Bir Pandalar Dataframe (NxN) ve i kullanıyorum kontrol etmek için her satır ve her bir öğesi üzerinde yineleme istiyorum satırlardan daha büyük demek. Eğer büyükse i

1. kullanıyorum ortalama değerini hesaplamak için eleman değerini değiştirmek istiyorum: Eğer öyleyse

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

ancak her bir elemanın üzerinde yineleme ve denetleme> = mean_value iç içe bir döngü ile Gerçekten yavaş.

+0

, kılan sen O (nm) daha iyisini yapabiliriz. – Natecat

+0

Sadece elementlerin ortalama –

+0

'dan büyük olması durumunda, sıra 1 değerini uygulamak için pandalarda işlev olduğunu umuyoruz. Bu işlev el ile tam olarak aynı şeyi yapar. Dizinin her elemanını değiştiriyorsunuz, bu yüzden dizinin tüm öğelerine erişmeniz gerekiyor. Bunu daha hızlı yapamazsınız – Natecat

cevap

6

Önce, satır tarafından mean saymak sonra ge ile karşılaştırarak ve nerede mask1 ekleyebilirsiniz: Her eleman erişen

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

Bu "mask" ve ge'! – Zero

+0

çok zarif bir çözüm +1 – MaxU

+1

Son sonuç dışında iyi görünüyor. Sadece df.mask istemiyor musun (df.gt (df.mean (axis = 1)), 1) '? – Alexander