【问题标题】:Select Rows Where MultiIndex Is In Another DataFrame选择 MultiIndex 在另一个 DataFrame 中的行
【发布时间】:2018-10-14 22:48:36
【问题描述】:

我有一个带有 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、切片的变体,但总是遇到错误。

【问题讨论】:

  • 设置索引前不能选择行吗?

标签: pandas


【解决方案1】:

您可以以同样的方式在df2 上使用set_index 并传递索引:

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

【讨论】:

  • 这似乎按预期缩小了行,但是所有列都显示为 Nan。索引的顺序重要吗? df2 中的索引与我实际数据集中的 df1 的顺序不同。
  • 您需要发布原始数据、代码来重现您的 dfs,而这个错误会导致您的问题,因为否则无法回答
猜你喜欢
  • 2019-05-24
  • 2015-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-06
相关资源
最近更新 更多