gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 00:23:41 25 4
gpt4 key购买 nike

使用列名和行索引(我指的是行号)从 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

但是这个解决方案非常消耗内存。我还收到以下警告:

“正在尝试在 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

但是它不起作用。我想提出一个更快/更少内存消耗的解决方案,因为这实际上是几个用户可以同时使用的网络应用程序。

非常感谢。

最佳答案

如果您正在考虑“循环行”,那么您就没有正确使用 pandas。您应该考虑列项。

使用np.where这是矢量化的(读取:快速):

cond = dataset['target'] == 1
dataset['sumlost'] = np.where(cond, dataset['to_be_repaid_principal'] + dataset['to_be_repaid_interest'], 0)
dataset['ratio_lost'] = np.where(cond, dataset['sumlost'] / dataset['expected_returned_sum'], 0)

关于python - 使用列名和行索引从 pandas 数据框中选择值的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58775425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com