在pandas数据透视表中,是否可以使用百分位数或分位数作为聚合函数?我尝试过numpy.percentile和pandas的quantile,但都没有成功。
虚拟数据:
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
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])
0.18.0
版本有些 Numpy 问题,但在0.18.1
版本中已经修复了。 - chrisb