2017-08-24 35 views
1

我難以從多索引中選擇pandas 0.14.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 

問題:反正是有使用多指標,但保留從單層次指標選擇行爲?期望的輸出就像在單一的索引,因此,5行在回報,而不是2

+1

這永遠不可能,因爲它會引發問題,如何處理第二層次的重複。對於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