如何计算pandas multiindex DataFrame中的分位数?

时间:2016-04-06 19:14:23

标签: python pandas

我有一个pandas multiindex DataFrame,我想在特定的索引级别计算其值的分位数。用一个例子来解释一下会更好。

首先,让我们创建DataFrame:

import itertools
import pandas as pd
import numpy as np

item = ('A', 'B')
item_type = (0, 1, 2)
location = range(5)
idx = pd.MultiIndex.from_tuples(list(itertools.product(item, item_type, location)),names=('Item', 'Type', 'Location'))
df = pd.DataFrame(np.random.randn(len(idx), 3), index=idx,columns=('C1', 'C2', 'C3'))
df

假设我们想要计算所有位置上每个项目和类型的列值中值的表格。这很容易使用内置的.median方法:

median_df = df.median(level=[0,1])
median_df

这将生成一个带有multiindex =(Item,Type)的三列DataFrame。它适用于大多数常见功能,如.mean,.max,.min等。

但它对.quantile不起作用 - 奇怪的是,分位数没有'级别'参数。

如何以与中位数等相同的方式计算给定的分位数?

1 个答案:

答案 0 :(得分:5)

首先按多指数级别分组来应用quantile功能:

df.groupby(level=[0,1]).quantile()

相同的结果适用于median函数,因此以下行等同于您的代码df.median(level=[0,1])

df.groupby(level=[0,1]).median()

对于GroupBy函数返回的groupby对象,您还有agg函数,允许您一次批量处理多个函数调用,结果数据框将包含多个级别列:

df.groupby(level=[0,1]).agg(['median', 'quantile'])