私は、MultiIndexを使わずにDataFrame.groupbyを使用して、サブサンプリング/クロスセクションを実行できることを学びました。パンダのマルチインデックスの利点?
一方、DataFrameにMultiIndexがある場合、DataFrame.groupbyを使用してサブサンプリング/クロスセクションを実行する必要があります。
それでは、印刷時の階層を非常に参考にしてきれいに表示するだけでなく、マルチインデックスはどのような点で優れていますか?
私は、MultiIndexを使わずにDataFrame.groupbyを使用して、サブサンプリング/クロスセクションを実行できることを学びました。パンダのマルチインデックスの利点?
一方、DataFrameにMultiIndexがある場合、DataFrame.groupbyを使用してサブサンプリング/クロスセクションを実行する必要があります。
それでは、印刷時の階層を非常に参考にしてきれいに表示するだけでなく、マルチインデックスはどのような点で優れていますか?
pandas 0.4リリースで階層索引(「マルチレベル」索引付けとも呼ばれる)が導入されました。
これは、特に高次元のデータを扱うために、非常に洗練されたデータ分析と操作の扉を開きます。基本的には、任意の高次元データを2次元の表構造(DataFrame)で効果的に格納および操作することができます。
このようなMultiIndex
を使用してデータフレームを構築する想像: -
import pandas as pd
import numpy as np
np.arrays = [['one','one','one','two','two','two'],[1,2,3,1,2,3]]
df = pd.DataFrame(np.random.randn(6,2),index=pd.MultiIndex.from_tuples(list(zip(*np.arrays))),columns=['A','B'])
df # This is the dataframe we have generated
A B
one 1 -0.732470 -0.313871
2 -0.031109 -2.068794
3 1.520652 0.471764
two 1 -0.101713 -1.204458
2 0.958008 -0.455419
3 -0.191702 -0.915983
このdf
は、単に2次元
df.ndim
2
のデータ構造である。しかし、我々は出力を見て、それを想像することができ、として3次元データ構造。データ-0.732470 -0.313871
と1
と
one
。one
2
とデータ-0.031109 -2.068794
。one
3
データ1.520652 0.471764
である。A.k.a:これはちょうど「かなり表示」ではない
「を効果的に2次元の表形式構造に任意に高次元のデータを格納し、操作します」。階層インデックスがあるので、データを簡単に取得できるという利点があります。
たとえば、
In [44]: df.ix["one"]
Out[44]:
A B
1 -0.732470 -0.313871
2 -0.031109 -2.068794
3 1.520652 0.471764
は、「1」に属するデータグループの新しいデータフレームのみを提供します。
そして、我々はこれを行うことにより、さらに私たちのデータ選択を絞り込むことができます: -
In [45]: df.ix["one"].ix[1]
Out[45]:
A -0.732470
B -0.313871
Name: 1
そして、我々は特定の値が必要な場合はもちろん、ここでの例があります: -
In [46]: df.ix["one"].ix[1]["A"]
Out[46]: -0.73247029752040727
もしそうなら上記の例で示した2つのインデックスのほかにさらに多くのインデックスがあるので、実際に興味のあるデータセットをドリルダウンして選択することができ、groupby
を必要としません。
データフレームから断面(行または列のいずれか)を取得することもできます...列によって
In [47]: df.xs('one')
Out[47]:
A B
1 -0.732470 -0.313871
2 -0.031109 -2.068794
3 1.520652 0.471764
: - - :
In [48]: df.xs('B', axis=1)
Out[48]:
one 1 -0.313871
2 -2.068794
3 0.471764
two 1 -1.204458
2 -0.455419
3 -0.915983
Name: B
3次元データ構造(データと1 '1 -0.790620 0.229276の最初の説明ではデータの3対の列により
。...)実際の例のデータには対応していないようです。 – Gerrat
from_arraysメソッドが使用可能な場合、MultiIndex.from_tuples(list(zip(* np.arrays)) を使用する特別な理由はありますか? df = pd.DataFrame(np.random.randn(6,2)、index = pd.MultiIndex.from_arrays(np.arrays)、columns = ['A'、 'B']) –