gpt4 book ai didi

python - 在循环中删除数据框中的值

转载 作者:行者123 更新时间:2023-12-05 04:26:26 25 4
gpt4 key购买 nike

我有一个带有排序值的数据框:

import numpy as np
import pandas as pd

sub_run = pd.DataFrame({'Runoff':[45,10,5,26,30,23,35], 'ind':[3, 10, 25,43,53,60,93]})

我想从径流中的最高值 (45) 开始,删除所有与“ind”之差小于 30 的值 (10, 5),重新更新 DataFrame ,然后转到第二高值 (35):删除与 "ind"相差 < 30 的索引,然后是 第三高值 (30) 并放下 26 和 23...我写了以下代码:

pre_ind = []

for (idx1, row1) in sub_run.iterrows():
var = row1.ind
pre_ind.append(np.array(var))
for (idx2,row2) in sub_run.iterrows():
if (row2.ind != var) and (row2.ind not in pre_ind):
test = abs(row2.ind - var)
print("test" , test)
if test <= 30:
sub_run = sub_run.drop(sub_run[sub_run.ind == row2.ind].index)

我希望找到值 [45,35,30] 作为输出。但是我只找到第一个。

非常感谢

最佳答案

试试这个:

list_pre_max = []
while True:

try:
max_val = sub_run.Runoff.sort_values(ascending=False).iloc[len(list_pre_max)]
except:
break
max_ind = sub_run.loc[sub_run['Runoff'] == max_val, 'ind'].item()
list_pre_max.append(max_val)
dropped_indices = sub_run.loc[(abs(sub_run['ind']-max_ind) <= 30) & (sub_run['ind'] != max_ind) & (~sub_run.Runoff.isin(list_pre_max))].index

sub_run.drop(index=dropped_indices, inplace=True)

输出:

>>>sub_run
Runoff ind
0 45 3
4 30 53
6 35 93

关于python - 在循环中删除数据框中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73047648/

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