将一个数据帧过滤到另一个数据帧中的两个字段

时间:2014-07-20 20:09:01

标签: python pandas

我的数据框包含day_of_year,year和值

的列
               Year   Day      Value 
  Object A     2011   2         12
  Object B     2011   3         12
  Object C     2012   4          3
  Object D     2012   5         23
   ...

我有另一张表,其中包含目标日期列表

  Year    Day       
  2011     2
  2012     4
   ...     ...

我想用第二个条件过滤第一个数据帧。 (在某一年中,所选日期与其他年份不同。但每年只有一天)

返回的数据集如下所示:

               Year   Day      Value 
  Object A     2011   2         12
  Object C     2012   4          3
   ...

我尝试过没有运气的各种lambdas,并且相信必须有一种更简单的方法来做到这一点。

2 个答案:

答案 0 :(得分:2)

IIUC,您可以使用merge

>>> df1
          Year  Day  Value
Object A  2011    2     12
Object B  2011    3     12
Object C  2012    4      3
Object D  2012    5     23
>>> df2
   Year  Day
0  2011    2
1  2012    4
>>> df1.reset_index().merge(df2).set_index("index")
          Year  Day  Value
index                     
Object A  2011    2     12
Object C  2012    4      3

我已使用reset/set_index来保留对象索引。

答案 1 :(得分:0)

您也可以使用' isin':

>>> df1
         Year  Day  Value
Object A  2011    2     12
Object B  2011    3     12
Object C  2012    4      3
Object D  2012    5     23

>>> df2
   Year  Day
0  2011    2
1  2012    4

>>> df1[ df1.Year.isin( df2.Year ) & df1.Day.isin( df2.Day ) ]

          Year  Day  Value
Object A  2011    2     12
Object C  2012    4      3