[英]Pandas pivot_table percentile
我試圖通過平均值,中位數,第25百分位數,第75百分位數,標准差來描述A列,B列。
df = pd.DataFrame({'A':[1,9,3,4,6,8,2,7],
'B':[2,4,7,8,9,2,5,6],
'S':['L','L','L','S','L','S','S','L']})
這是我做的,它起作用,因為我只有25%的百分位數:
df.pivot_table(columns = ['S'], values = ['A','B'], aggfunc = [np.mean, lambda x: np.percentile(x,25), np.median, np.std])
但如果我也把第75百分位數,它給我錯誤信息:
Reindexing only valid with uniquely valued Index objects
理想情況下,我希望輸出列表在下一列中達到第75個百分點。
這將做我認為你想要的,但沒有lambda和額外的幾行:
def my25(g):
return np.percentile(g, 25)
def my75(g):
return np.percentile(g, 75)
df.pivot_table(columns = ['S'], values = ['A','B'],
aggfunc = [np.mean, my25, np.median, np.std, my75])
mean my25 median std my75
S L S L S L S L S L S
A 5.2 4.67 3 3.0 6 4 3.19 3.06 7 6.0
B 5.6 5.00 4 3.5 6 5 2.70 3.00 7 6.5
編輯:實際上,如果使用groupby聚合而不是pivot_table,則可以僅使用lambda函數,並為每個函數提供名稱。
func_lst = [('mean',np.mean), ('25',lambda x:np.percentile(x,0.25)),
('med',np.median), ('std',np.std), ('75',lambda x:np.percentile(x,0.75))]
df.groupby( 'S')。AGG(func_lst).STACK(級別= 0).unstack(級別= 0).swaplevel(0,1,軸= 1)
mean 25 med std 75
S L S L S L S L S L S
A 5.2 4.67 3 3.0 6 4 3.19 3.06 7 6.0
B 5.6 5.00 4 3.5 6 5 2.70 3.00 7 6.5
我認為在pivot_table調用中使用func_lst可能有效,但事實並非如此。 無論如何,只需定義my25,my75函數並使用pivot_table就更清楚了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.