对于 pandas.Series,我知道如何删除异常值。像这样:
x = pd.Series(np.random.normal(size=1000))
iqr = x.quantile(.75) - x.quantile(.25)
y = x[x.between(x.quantile(.25) - 1.5*iqr, x.quantile(.75) + 1.5*iqr)]
我想对 DataFrame 的不同系列/列进行细化
import string
import random
df = pd.DataFrame([])
df['A'] = pd.Series(np.random.normal(size=1000))
df['B'] = pd.Series(np.random.normal(size=1000, loc=-5, scale=1))
df['C'] = pd.Series(np.random.normal(size=1000, loc=10, scale=2))
df['index'] = pd.Series([random.choice(string.ascii_uppercase) for i in range(1000)])
df.set_index('index')
我通常会做类似的事情
df = df.groupby('index').mean()
但是,在这种情况下,它也会平均异常值,我想从平均中忽略它。
请注意,随机数据比异常值在每列中的位置不同。因此,应仅在该列/系列中忽略异常值
结果应该是一个 DataFrame,有 26 行(每个字母一个index
)和 3 列,平均值没有异常值
我可以遍历列df
并执行第一个代码块。但是有更好的方法吗?
欢迎提出建议。接受任何方法