2017-08-24 5 views
1

pandas 0.14.1私はそれが古いバージョンであることを知っていますが、私の選択はと限定されています)のMultiIndexから選択するのが難しいです。MultiIndexから繰返しラベルを選択して

は、私は、インデックスラベルに基づいて選択を行う必要があります。 1つのレベルの索引選択のため

は、マルチレベルのインデックス選択のために繰り返し

(pd.DataFrame 
.from_records({'A' : [1,2,3], 'B' : [11,12,13]}) 
.set_index('A') 
).loc[idx[1,1,1,2,1], :] 

    B 
A  
1 11 
1 11 
1 11 
2 12 
1 11 

罰金を行くが唯一の一意の値を取って、別の方法で動作します。

(pd.DataFrame 
.from_records({'A' : [1,2,3], 'B' : [11,12,13], 'C' : [21,22,23]}) 
.set_index(['A', 'B']) 
).loc[idx[[1,1,1,2,1], :], :] 

     C 
A B  
1 11 21 
2 12 22 

QUESTION:マルチインデックスを使用しますが、単一レベルのインデックスから選択動作を維持するためにとにかくありますか?予想される出力は、このように、単一のインデックスのようにリターンで5行ない2

+1

2番目のレベルで重複をどのように扱うかが問題になるため、これは決して不可能です。レベル1の各値に対して、すべてを返しますか?または1?戻ってくる人は何人ですか?あなたは不可能なことを求めています、そして、率直に言って、私は彼らがこれを実装していないことをうれしく思います。私にとって –

+0

@COLDSPEEDは、 'とすべての明示的な選択を考えると、それはすべてを返すべきであることは明らかである:' 'IDXに[[1,1,1,2,1]、:]' –

+0

cᴏʟᴅsᴘᴇᴇᴅ@あなたが(と言うインポッシブル - ;私の好きな種類の問題。 – piRSquared

答えて

1

私が思い付くことが最高です。これは多くの理由で爆発するだろうと警告されています。私はあなたに「これは私の実際のデータでは機能しませんでした。

オプション1
これは常に動作しますが、いつもあなたが期待したものではないかもしれません。

pd.concat([df.xs(i, drop_level=False) for i in [1, 1, 1, 2, 1]]) 

     C 
A B  
1 11 21 
    11 21 
    11 21 
2 12 22 
1 11 21 

あなたの最初のレベルの値が自分で一意でない場合は、オプション2
これが解除されます。

df.iloc[df.index.get_level_values(0).searchsorted([1, 1, 1, 2, 1])] 

     C 
A B  
1 11 21 
    11 21 
    11 21 
2 12 22 
1 11 21 
関連する問題