Pandas透视表百分位数/分位数

4

在pandas数据透视表中,是否可以使用百分位数或分位数作为聚合函数?我尝试过numpy.percentile和pandas的quantile,但都没有成功。

2个回答

10

虚拟数据:

In [135]: df = pd.DataFrame([['a',2,3],
                             ['a',5,6],
                             ['a',7,8], 
                             ['b',9,10], 
                             ['b',11,12], 
                             ['b',13,14]], columns=list('abc'))
np.percentile 看起来运行良好?
In [140]: df.pivot_table(columns='a', aggfunc=lambda x: np.percentile(x, 50))
Out[140]: 
a  a   b
b  5  11
c  6  12

非常感谢chrisb!我一直在尝试直接使用它而不将其放入lambda函数中。 - Chris
这是一个很好的解决方案,直到今天。上述解决方案不再起作用(但当我使用'mean'、'max'等时,它确实有效)。如果您有任何想法,将不胜感激!谢谢! - Nicole Goebel
你目前用的是哪个版本?如果我没记错的话, 0.18.0 版本有些 Numpy 问题,但在 0.18.1 版本中已经修复了。 - chrisb

0

lambda函数的解决方案可行,但会产生列名为"<lambda_0>"等需要稍后重命名的问题。

我们可以选择定义自己的函数来代替使用lambda(即未命名的函数)。它们应该在值系列上操作。

df = pd.DataFrame([['a',2,3],
                   ['a',5,6],
                   ['a',7,8], 
                   ['b',9,10], 
                   ['b',11,12], 
                   ['b',13,14]], columns=list('abc'))

def quantile_25(growth_vals:pd.Series):
    return growth_vals.quantile(.25)

def quantile_75(growth_vals:pd.Series):
    return growth_vals.quantile(.75)


df.pivot_table(columns='a', aggfunc=[quantile_25, np.median, quantile_75])


生成的列名将与函数名称对应。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接