基于 IQR 按组移除异常值

Remove outliers by group based on IQR

我有一个包含以下变量的 df:

(以及一大堆其他东西)。

我想 trim 基于 iqr 标准的异常值。但是,我想按条件、按页执行此操作。

我认为解决方案将从

开始
grouped = df.groupby(['pp','condition'])

然后呢?如何删除每组的异常值?我是使用 apply 函数,还是 filter 函数帮助我解决这个问题?

你可以这样做:

# define a function to filter out your data
def filter_condition(grped_df):
    if some_condition:
        return grped_df[some_condition]
    return grped_df


grouped = df.groupby(by=['pp','condition'])

# use apply to pass each group to your defined function and reset index to remove grouped multi index.

filtered_df = grouped.apply(filter_condition).reset_index(drop=True)