gpt4 book ai didi

python - Pandas pivot_table 百分位数

转载 作者:行者123 更新时间:2023-11-28 16:28:45 24 4
gpt4 key购买 nike

我试图通过平均值、中位数、第 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(level=0).unstack(level=0).swaplevel(0,1,axis=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 会更清楚。

关于python - Pandas pivot_table 百分位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34260003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com