使用列名和行索引从pandas数据框中选择值的正确方法是什么?

问题描述 投票:1回答:1

什么是使用列名和行索引(我的意思是行号)从pandas数据框中选择值的最有效方法?

我有一种情况,我必须遍历行:

我有一个可行的解决方案:

i = 0
while i < len(dataset) -1:
    if dataset.target[i] == 1:
        dataset.sum_lost[i] = dataset['to_be_repaid_principal'][i] + dataset['to_be_repaid_interest'][i]
        dataset.ratio_lost[i] = dataset.sum_lost[i] / dataset['expected_returned_sum'][i]
    else:
        dataset.sum_lost[i] = 0
        dataset.ratio_lost[i]= 0
    i += 1   

但是此解决方案需要大量RAM。我也收到以下警告:

“正在尝试从DataFrame的切片副本上设置一个值。”

所以我想提出另一个:

i = 0
while i < len(dataset) -1:
    if dataset.iloc[i, :].loc['target'] == 1:
        dataset.iloc[i, :].loc['sum_lost'] = dataset.iloc[i, :].loc['to_be_repaid_principal'] + dataset.iloc[i, :].loc['to_be_repaid_interest']
        dataset.iloc[i, :].loc['ratio_lost'] = dataset.iloc[i, :].loc['sum_lost'] / dataset.iloc[i, :].loc['expected_returned_sum']
    else:
        dataset.iloc[i, :].loc['sum_lost'] = 0
        dataset.iloc[i, :].loc['ratio_lost'] = 0
    i += 1

但是它不起作用。我想提出一个更快/更省钱的解决方案,因为这实际上是一些用户可以同时使用的Web应用程序。

非常感谢。

python pandas
1个回答
0
投票

如果您正在考虑“遍历行”,那么您使用的不是熊猫。您应该考虑使用列的术语。

使用向量化的np.where(读:快):

np.where
© www.soinside.com 2019 - 2024. All rights reserved.