繁体   English   中英

Pandas pivot_table百分位数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM