2015-08-13 67 views
0

我想知道使用另一個索引切片多索引的最佳方法,其中另一個索引是主多索引的一個子集。MultiIndex Slice |切片與另一個索引跨越一個子集

np.random.seed(1) 
dict_data_russian = {'alpha':[1,2,3,4,5,6,7,8,9],'beta':['a','b','c','d','e','f','g','h','i'],'gamma':['r','s','t','u','v','w','x','y','z'],'value_r': np.random.rand(9)} 
dict_data_doll = {'beta':['d','e','f'],'gamma':['u','v','w'],'dont_care': list('PQR')} 
df_russian = pd.DataFrame(data=dict_data_russian) 
df_russian.set_index(['alpha','beta','gamma'],inplace=True) 
df_doll = pd.DataFrame(data=dict_data_doll) 
df_doll.set_index(['beta','gamma'],inplace=True) 

print df_russian 
print df_doll.head() 

其中產量:

    value_r 
alpha beta gamma   
1  a r  0.4170 
2  b s  0.7203 
3  c t  0.0001 
4  d u  0.3023 
5  e v  0.1468 
6  f w  0.0923 
7  g x  0.1863 
8  h y  0.3456 
9  i z  0.3968 


      dont_care 
beta gamma   
d u    P 
e v    Q 
f w    R 

如何最好地利用該指數df_doll切片df_russian,上水平測試&伽馬,爲了下面的輸出?

    value_r 
alpha beta gamma   
4  d u  0.3023 
5  e v  0.1468 
6  f w  0.0923 

回答

2

你可以做

In [1131]: df_russian[df_russian.reset_index(0).index.isin(df_doll.index)] 
Out[1131]: 

alpha beta gamma value_r 
    4 d  u 0.302333 
    5 e  v 0.146756 
    6 f  w 0.092339 

這將使用通過重置主要指標外水平,如果剩餘的水平在df_doll每一行的指數衍生檢查一個布爾關鍵。

0

你可以脫光指數,加入幀,然後重新添加索引

result = df_doll.reset_index().merge(df_russian.reset_index(), on=['beta', 'gamma'], how='inner') 
result.set_index(['alpha', 'beta', 'gamma'], inplace=True) 
result.drop('dont_care', 1) 
相關問題