2015-01-28 57 views
5

Tôi có một dataframe gấu trúc với cấu trúc sau:cột số học có điều kiện trong gấu trúc 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 

Tôi muốn nhập một giá trị trong cột 'tính toán dựa trên các giá trị trong 'x' và 'y' . (ví dụ x/y) nhưng chỉ trong những tế bào nơi cột 'tình trạng' chứa NaN (np.isnan (myData [ 'tình trạng']) các dataframe cuối cùng sẽ trông như thế này:

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 

tôi hài lòng với ý tưởng bước qua từng hàng bằng cách sử dụng vòng lặp 'for' và sau đó sử dụng câu lệnh 'if' để tính toán nhưng khung dữ liệu thực tế tôi có là rất lớn và tôi muốn thực hiện các phép tính theo cách dựa trên mảng. Điều này có thể không? Tôi đoán tôi có thể tính giá trị cho tất cả các hàng và sau đó xóa giá trị mà tôi không muốn nhưng điều này có vẻ như rất nhiều nỗ lực lãng phí (các NaN khá hiếm trong khung dữ liệu) và trong một số trường hợp 'điều kiện' bằng 1 , việc tính toán không thể được thực hiện do chia cho số không.

Xin cảm ơn trước.

Trả lời

7

Sử dụng where và vượt qua tình trạng của bạn để nó, điều này sẽ sau đó chỉ thực hiện tính của bạn, nơi các hàng đáp ứng các điều kiện:

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! Cảm ơn bạn. – user1718097

Các vấn đề liên quan