我有一个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不起作用 – 奇怪的是,分位数没有’level’参数.
如何以与中位数等相同的方式计算给定的分位数?
解决方法:
通过首先按多指数级别分组来应用分位数功能:
df.groupby(level=[0,1]).quantile()
相同的结果将适用于中值函数,因此以下行等同于您的代码df.median(level = [0,1]):
df.groupby(level=[0,1]).median()
对于groupby函数返回的GroupBy对象,您还有一个agg函数,它允许您一次批量调用多个函数调用,结果数据框将有多个列级别:
df.groupby(level=[0,1]).agg(['median', 'quantile'])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。