2016-05-09 8 views
2

私は、このようなマルチインデックス操作によって生成されたデータフレームを持っています。パンダマルチインデックスを数え順に並べ替えますか?

     Col3 
Col1  Col2 
A    A1   N 
B    B1   N 
       B2   N 
C    C1   N 
       C2   N 
       C3   N 

Iは、レベルAの行の下降カウントすることによって、このデータフレームを分類しようとしている、B、およびCは、この場合には、レベルAの1行を有し、Bは2列を有し、そしてCは有します3行...ので、出力は

​​

だろう私は、ソートし、実際には各レベルでの行数をカウントし、DFに列を追加することで、手動でこれを行うと考えることができ、より多くのがありますエレガントな方法?もしそうなら、より多くのレベルに一般化する方法はありますか?

ありがとうございました!

EDIT:元のデータフレームを生成するコード。 df.ix[df.groupby(level=0).size().sort_values(ascending=False).index,:]を実行

df = pd.DataFrame([['a', 'z', 'x', 0.123], ['a','z', 'x', 0.234], 
       ['a', 'z', 'y', 0.451], ['b', 'z', 'x', 0.453], ['b', 'z', 'x', 0.453], ['b', 'z', 'x', 0.453], ['b', 'z', 'x', 0.453]], 
       columns=['first', 'second', 'value1', 'value2'] 
       ).set_index(['first', 'second']) 

は、あなたが最初のインデックスレベルでgroupbyでそれを行うとsizeをソートし、あなたのDFにREINDEXするこれを使用することができTypeError: Expected tuple, got str

答えて

2

IIUCを生成します。上記を壊す

In [25]: 
df.ix[df.groupby(level=0).size().sort_values(ascending=False).index,:] 

Out[25]: 
      Col3 
Col1 Col2  
C C1  N 
    C2  N 
    C3  N 
B B1  N 
    B2  N 
A A1  N 

下:

In [26]: 
df.groupby(level=0).size() 

Out[26]: 
Col1 
A 1 
B 2 
C 3 
dtype: int64 

In [27]: 
df.groupby(level=0).size().sort_values(ascending=False) 

Out[27]: 
Col1 
C 3 
B 2 
A 1 
dtype: int64 

In [28]: 
df.groupby(level=0).size().sort_values(ascending=False).index 

Out[28]: 
Index(['C', 'B', 'A'], dtype='object', name='Col1') 

EDIT

OKは、この私が予想よりトリッキーだったが、次の作品:

In [76]: 
i = df.index.get_level_values(0) 
df.iloc[i.reindex(df.groupby(level=0).size().sort_values(ascending=False).index)[1]] 

Out[76]: 
      value1 value2 
first second    
b  z   x 0.453 
     z   x 0.453 
     z   x 0.453 
     z   x 0.453 
a  z   x 0.123 
     z   x 0.234 
     z   y 0.451 

だから何これが行うことであるが、第一レベルの指標値を取得し、reindexgroupby結果に対してそれらをESと使用していますint index元のdfに対して生成

+0

私はあなたの提案したメソッドを実行すると、 'TypeError:Expected tuple、str'を取得します。 'df.groupby(level = 0).size()。sort_values(ascending = False).index'は正しい値を持つIndexオブジェクトを生成しますが、実際のインデックス作成は失敗しています。何か案は? –

+0

あなたはどのバージョンのパンダを使用していますか?私は0.18.0を実行しており、これは正常に動作します – EdChum

+0

私はパンダを使用しています:0.18.1。 –

関連する問題