2017-08-31 12 views
0

マルチインデックスがあると仮定して、インデックスのレコードをどのように数えますか?より明示的には、以下の例ではX、Yが私のマルチインデックスです。このデータフレームに3人いるとします。どのように私はそれらを見つけることができます、データフレームの長さは、私が望むものではない合計行を私に与えます。データフレーム内のマルチインデックスの長さを数えるパンダ

  Modules 
X  Y 
1 11   A 
    11   B 
    11   C 
2 13   A 
    13   B 
3 17   A 
    17   B 
    17   D 

このマルチインデックスの長さはどのようにカウントされますか?次のようにこれを行うには

+0

私は基本的に 'X' の値only.orインデックスをカウントしています。上記の質問を参考にして – Shyryu

答えて

0

一つの方法は次のとおりです。

df.index.unique().labels[0].shape[0] 
+0

、私はあなたが望む場合は、xを取得したいと思います。またはlen()、ofおよびyのいずれかです。上の質問を参照しているこの特定の例の – Shyryu

0

インデックスの長さは、データフレームは、そのように表示されるように印刷されていない場合でも、データフレームの長さでなければなりません。 2レベルのマルチインデックスでは、df.index.get_level_values(0)df.index.get_level_values(1)のいずれかを呼び出すと、返されるインデックスレベルがDataFrameと同じ長さになることがわかります(必要に応じて要素が繰り返されます)。

あなたは、各インデックスのペアリングがユニークな組み合わせになることがわかっている場合は、あなたの例のように、あなたが呼び出すことができます。

df.index.get_level_values(0).nunique() 

を...引数(つまり、どちらか0としてあなたのマルチインデックスのレベルのいずれかでまたは1)、あなたは個人の数を取得します。前の前提が成り立たない組み合わせになる場合は、df.index.nunique()を呼び出すことができますが、インデックスに重複があるとエラーが発生する可能性があります。最も安全な賭けではなくなる可能性がありますビットのラウンドアバウトですが、ユニークな組み合わせの数を取得することが保証さ

d.index.value_counts().size 

...。

+0

では、必要に応じてxを取得したいと考えています。またはlen()、ofおよびyのいずれかです。この特定の例では、それは3です。 – Shyryu

+0

私は提案したアプローチのいずれかを試みましたか?どちらも3を返します。 – cmaher

1

オプション1

df.index.to_series().nunique() 

3 

オプション2

df.groupby(df.index.names).ngroups 
# df.groupby(level=df.index.names).ngroups 
# for pandas < 0.20 or if column name conflict 

3 
関連する問題