如何保持两个数据帧的交集

时间:2017-04-09 13:20:11

标签: python python-2.7 python-3.x date pandas

我有一个数据集,其日期在索引11000个日期中。我有第二个数据集,只有一列由日期组成。

我只想保留第一个数据集的行,其中包含第二个数据集中包含的日期。

ex.
[In] DataSet1
[Out] 
                     1           2           3           4           5 
 2019-04-19         NaN         NaN         NaN         NaN         NaN   
 2019-04-20         NaN         NaN         NaN         NaN         NaN   
 2019-04-21         apple       NaN         NaN         NaN         NaN   
 2019-04-22         NaN         NaN         peer        NaN         NaN   
 2019-04-23         NaN         car         NaN         NaN         NaN   
 2019-04-24         NaN         NaN         NaN         yellow      NaN   
 2019-04-25         NaN         NaN         NaN         NaN         NaN 

[In] DataSet2 
[Out] 
0  2019-04-21
1  2019-04-23

我想要什么

[In] "Intersection" (which is not really an intersection) btween the 2 datasets. 
[Out]
                    1           2           3           4           5   
 2019-04-21         apple       NaN         NaN         NaN         NaN     
 2019-04-23         NaN         car         NaN         NaN         NaN   

再次,第二个数据集只包含一些日期。

非常感谢!

1 个答案:

答案 0 :(得分:1)

您可以先检查两个dtype是否相同,然后在评论中按loc选择MaxU

print (DataSet1.index.dtype)
datetime64[ns]

print (DataSet2['col'].dtype)
datetime64[ns]

print (DataSet2.columns)
Index(['col'], dtype='object')


print (DataSet2)
         col
0 2019-04-21
1 2019-04-23

df = DataSet1.loc[DataSet2['col']]
print (df)
                1    2    3    4   5
2019-04-21  apple  NaN  NaN  NaN NaN
2019-04-23    NaN  car  NaN  NaN NaN

intersection的另一个解决方案:

idx = DataSet1.index.intersection(DataSet2['col'])
print (idx)
DatetimeIndex(['2019-04-21', '2019-04-23'], dtype='datetime64[ns]', freq=None)

df = DataSet1.loc[idx]
print (df)
                1    2    3    4   5
2019-04-21  apple  NaN  NaN  NaN NaN
2019-04-23    NaN  car  NaN  NaN NaN