选择MultiIndex在另一个DataFrame中的行

时间:2018-05-04 12:34:16

标签: pandas

我有一个带有MultiIndex的DataFrame(DF1)和许多其他列。在另一个DataFrame(DF2)中,我有2列包含MultiIndex中的一组值。我想从DF1中选择MultiIndex与DF2中的值匹配的行。

df1 = pd.DataFrame({'month': [1, 3, 4, 7, 10],
                    'year': [2012, 2012, 2014, 2013, 2014],
                    'sale':[55, 17, 40, 84, 31]})

df1 = df1.set_index(['year','month'])

            sale
year  month
2012  1     55
2012  3     17
2014  4     40
2013  7     84
2014  10    31

df2 = pd.DataFrame({'year': [2012,2014],
                    'month': [1, 10]})

   year  month  
0  2012   1
1  2014   10

我想创建一个新的DataFrame:

                 sale
year    month
2012    1        55
2014    10       31

我尝试使用.isin,.loc,切片等多种变体,但一直遇到错误。

1 个答案:

答案 0 :(得分:1)

你可以set_index df2以同样的方式传递索引:

In[110]:
df1.loc[df2.set_index(['year','month']).index]

Out[110]: 
            sale
year month      
2012 1        55
2014 10       31

更具可读性的版本:

In[111]:
idx = df2.set_index(['year','month']).index
df1.loc[idx]

Out[111]: 
            sale
year month      
2012 1        55
2014 10       31