【问题标题】:How to calculate quantiles in a pandas multiindex DataFrame?如何计算熊猫多索引数据帧中的分位数?
【发布时间】:2016-04-07 03:31:33
【问题描述】:

我有一个 pandas 多索引 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 不起作用——奇怪的是,quantile 没有 'level' 参数。

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

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    通过首先按多索引级别分组来应用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'])
    

    【讨论】:

      猜你喜欢
      • 2014-07-04
      • 2021-06-08
      • 2014-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-28
      • 2017-05-13
      相关资源
      最近更新 更多