2016-04-06 13 views
4

私はpandas multiindex DataFrameを持っており、特定のインデックスレベルでその値の分位数を計算したいと考えています。例を挙げて説明するほうがよいでしょう。パンダmultiindex 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 

これはマルチインデックス=(項目、タイプ)と3列のデータフレームを生成します。これは、.mean、.max、.minなどのほとんどの一般的な関数で動作します。

しかし、それはうまくいきません.quantile - 不思議なことに、quantileに 'level'パラメータがありません。

中央値などの場合と同じ方法で、指定した分位点をどのように計算できますか?

答えて

4

は、あなたのマルチインデックスレベルで最初のグループ化によりquantile機能を適用します。

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

同じ結果がmedian機能のために動作しますので、次の行は、あなたのコードdf.median(level=[0,1])と同等です:

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

groupby関数によって返されたGroupByオブジェクトに対して、agg関数を使用すると、一度に複数の関数呼び出しを一括処理できます。また、t結果としてデータフレームには列のレベルがいくつかあります。

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

はい、これは機能します。ありがとうございました。 – germ

関連する問題