Определите функцию, которая будет возвращать фрейм данных с привязкой upper
и lower
, при условии, что вам нужен только IQR, groupby
, затем рассчитайте IQR, назначьте эти столбцы для df
, наконец, выполните запрос где значения не являются выбросами:
def fun(serie):
return pd.DataFrame([[serie.quantile(0.25), serie.quantile(0.75)]]
*serie.shape[0],
columns=['lower', 'upper'],
index=serie.index)
df[['lower', 'upper']] = df.groupby('Country')['Life Expectancy'].apply(fun)
df = df.query('lower <= `Life Expectancy` <= upper')
.drop(columns=['lower', 'upper'])