2015-01-28 22 views
5

Mam dataframe pandy o następującej strukturze:Warunkowe kolumna arytmetyka w Pandy dataframe

import numpy as np 
import pandas as pd 
myData = pd.DataFrame({'x': [1.2,2.4,5.3,2.3,4.1], 'y': [6.7,7.5,8.1,5.3,8.3], 'condition':[1,1,np.nan,np.nan,1],'calculation': [np.nan]*5}) 

print myData 

    calculation condition x y 
0   NaN   1 1.2 6.7 
1   NaN   1 2.4 7.5 
2   NaN  NaN 5.3 8.1 
3   NaN  NaN 2.3 5.3 
4   NaN   1 4.1 8.3 

chcę wprowadzić wartość w „obliczania” kolumny na podstawie wartości w „x” i „y” . (na przykład x/Y), ale jedynie w komórkach, w których określenia 'stan' kolumna zawiera NaN (np.isnan (Mydata [ 'stan']) ostateczny dataframe powinien wyglądać tak jak poniżej:

calculation condition x y 
0   NaN   1 1.2 6.7 
1   NaN   1 2.4 7.5 
2  0.654  NaN 5.3 8.1 
3  0.434  NaN 2.3 5.3 
4   NaN   1 4.1 8.3 

ja zadowolony z pomysłu przechodzenia przez każdy wiersz z kolei za pomocą pętli "for", a następnie za pomocą instrukcji "if" do obliczeń s ale faktyczna ramka danych, którą mam jest bardzo duża i chciałem wykonać obliczenia w sposób oparty na tablicy. czy to możliwe? Sądzę, że mógłbym obliczyć wartość dla wszystkich wierszy, a następnie usunąć te, których nie chcę, ale wydaje się, że jest to dużo zmarnowanego wysiłku (NaNy są dość rzadkie w ramce danych) i, w niektórych przypadkach, gdy "warunek" jest równy 1 , obliczenia nie można dokonać z powodu dzielenia przez zero.

Z góry dziękuję.

Odpowiedz

7

Zastosowanie where i przekazać swój stan do niego, to będzie dopiero wtedy wykonać swoje obliczenia, gdzie wiersze spełnia warunek:

In [117]: 

myData['calculation'] = (myData['x']/myData['y']).where(myData['condition'].isnull()) 
myData 
Out[117]: 
    calculation condition x y 
0   NaN   1 1.2 6.7 
1   NaN   1 2.4 7.5 
2  0.654321  NaN 5.3 8.1 
3  0.433962  NaN 2.3 5.3 
4   NaN   1 4.1 8.3 
+0

Perfect! Dziękuję Ci. – user1718097