gpt4 book ai didi

python - 优化 pandas 中运行时的过滤功能

转载 作者:太空狗 更新时间:2023-10-30 01:11:25 25 4
gpt4 key购买 nike

def filter_data(df, raw_col,threshold,filt_col):
df['pct'] = None
df[filt_col] = None
df[filt_col][0] = df[raw_col][0]
max_val = df[raw_col][0]
for i in range(1,len(df)):
df['pct'][i] = (df[raw_col][i] - max_val)*1.0 / max_val
if abs(df['pct'][i]) < threshold:
df[filt_col][i] = None
else:
df[filt_col][i] = df[raw_col][i]
max_val = df[raw_col][i]
df = df.dropna(axis=0, how='any').reset_index()
return df


from random import randint
some_lst = [randint(50, 100) for i in range(0,50)]
some_df = pd.DataFrame({'raw_col':some_lst})
some_df_filt = filter_data(some_df,'raw_col',0.01,'raw_col_filt')

目标是创建一个新列 (filt_col),其中使用以下逻辑从数字列 (raw_col) 中删除记录;如果两个相邻行之间的变化率小于阈值,则删除后者。它可以工作,但在运行时间方面效率很低。关于如何优化它的任何提示?

最佳答案

IIUC,您可以使用 .pct_change() 非常简单地完成此操作和 loc

首先

df['pctn'] = df.raw_col.pct_change()

然后

threshold  = 0.01
df.loc[df.pctn.abs() >= threshold]

您可以检查此解决方案产生的结果是否与您所说的相同,有效,但速度较慢

df.loc[df.pctn.abs() >= 0.01].raw_col.tolist() == some_df_filt.raw_col.tolist()
True

关于python - 优化 pandas 中运行时的过滤功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50819051/

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