對于 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并執行第一個代碼塊。但是有更好的方法嗎?
歡迎提出建議。接受任何方法
uj5u.com熱心網友回復:
使用以下代碼。
def mean_without_outlier(x): # x: series
iqr = x.quantile(.75) - x.quantile(.25)
y = x[x.between(x.quantile(.25) - 1.5*iqr, x.quantile(.75) 1.5*iqr)]
return y.mean()
df.groupby("index")[['A', 'B', 'C']].agg(mean_without_outlier)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/345075.html
上一篇:將嵌套資料幀轉換為多索引
下一篇:列上的唯一關鍵字
