熊猫 - 有效的元素比较

时间:2016-11-06 21:26:13

标签: python pandas

我正在使用包含多个列的大型multiIndex DataFrame results_matrix。我需要访问列Results1Results2的每个元素,并根据存储在DataFrame列Indicator中的指示符变量选择其中一个元素。

目前,我正在访问for循环中的每个元素 - 但是,这会大大增加程序的计算时间。 有没有办法更有效地做到这一点?

import pandas as pd
import numpy as np

selected_results = pd.Series(np.nan)
# Used to iterate through the rows of the DataFrame
i = 0
for items in results_matrix['Indicator']:
    if results_matrix.iloc[i]['Indicator'] == 1:
        selected_results[i] = results_matrix.iloc[i]['Results1']
    else:
        selected_results[i] = results_matrix.iloc[i]['Results2']
    i += 1

results_matrix['SelectedResults'] = selected_results.values

1 个答案:

答案 0 :(得分:2)

我认为你需要numpy.where

results_matrix['SelectedResults'] = np.where(results_matrix['Indicator'] == 1, 
                                             results_matrix['Results1'], 
                                             results_matrix['Results2'])

样品:

results_matrix = pd.DataFrame({'Indicator':[1,2,3],
                               'Results1':[4,5,6],
                               'Results2':[7,8,9]})

print (results_matrix)
   Indicator  Results1  Results2
0          1         4         7
1          2         5         8
2          3         6         9

results_matrix['SelectedResults'] = np.where(results_matrix['Indicator'] == 1, 
                                             results_matrix['Results1'], 
                                             results_matrix['Results2'])

print (results_matrix)                                             
   Indicator  Results1  Results2  SelectedResults
0          1         4         7                4
1          2         5         8                8
2          3         6         9                9