gpt4 book ai didi

python - 在 Pandas DataFrame 中按组删除异常值的更快方法

转载 作者:太空狗 更新时间:2023-10-29 17:32:00 30 4
gpt4 key购买 nike

<分区>

我有一个相对较大的 DataFrame 对象(大约一百万行,数百列),我想按组裁剪每一列中的异常值。我的意思是“按组裁剪每列的离群值”——计算组中每列的 5% 和 95% 分位数,并裁剪该分位数范围之外的值。

这是我目前使用的设置:

def winsorize_series(s):
q = s.quantile([0.05, 0.95])
if isinstance(q, pd.Series) and len(q) == 2:
s[s < q.iloc[0]] = q.iloc[0]
s[s > q.iloc[1]] = q.iloc[1]
return s

def winsorize_df(df):
return df.apply(winsorize_series, axis=0)

然后,使用名为 features 并由 DATE 索引的 DataFrame,我可以做到

grouped = features.groupby(level='DATE')
result = grouped.apply(winsorize_df)

这行得通,除了它非常慢,大概是由于嵌套的 apply 调用:每个组一个,然后每个组中的每个列一个。我尝试通过一次计算所有列的分位数来摆脱第二个 apply,但在尝试用不同的值对每一列设置阈值时遇到了困难。有没有更快的方法来完成这个过程?

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