簡體   English   中英

pandas數據幀中的條件列算法

[英]Conditional column arithmetic in pandas dataframe

我有一個pandas數據幀,具有以下結構:

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

我想根據'x'和'y'(例如x / y)中的值在'calculation'列中輸入一個值,但僅限於'condition'列包含NaN的那些單元格中(np.isnan(myData [ 'condition'])。最終的數據框應如下所示:

   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

我很高興使用'for'循環依次單步執行每一行,然后使用'if'語句進行計算,但我擁有的實際數據幀非常大,我想在數組中進行計算 - 基於方式。 這可能嗎? 我想我可以計算所有行的值,然后刪除我不想要的那些但是這似乎浪費了很多精力(NaN在數據幀中很少見),在某些情況下'condition'等於1 ,由於除零,無法進行計算。

提前致謝。

使用where並將條件傳遞給它,這將只在行符合條件的情況下執行計算:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM