我正在使用包含多个列的大型multiIndex DataFrame results_matrix
。我需要访问列Results1
和Results2
的每个元素,并根据存储在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
答案 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