2016-12-24 88 views
2

我试图找到使用两个单独的DataFrames最近的前一个日期。其实我已经得到了代码来做到这一点,但它采用的是for循环,我宁可不使用,尤其是我的实际DataFrames会比下面的代码片段大得多:熊猫 - 找到没有循环的两个DataFrames之间的最近日期

date_x = pd.to_datetime(['1/15/2015','2/14/2015','3/16/2015','4/15/2015','5/15/2015','6/14/2015','7/14/2015']) 
date_y = pd.to_datetime(['1/1/2015','3/1/2015','6/14/2015','8/1/2015']) 

dfx = pd.DataFrame({'date_x':date_x}) 
dfy = pd.DataFrame({'date_y':date_y}) 

z_list = [] 
for x in range(dfx['date_x'].count()): 
    z_list.append(dfy['date_y'][dfy['date_y'] <= dfx['date_x'][x]].max()) 

dfx['date_z'] = z_list 

收益率...

 date_x  date_z 
0 2015-01-15 2015-01-01 
1 2015-02-14 2015-01-01 
2 2015-03-16 2015-03-01 
3 2015-04-15 2015-03-01 
4 2015-05-15 2015-03-01 
5 2015-06-14 2015-06-14 
6 2015-07-14 2015-06-14 

这正是我想要的,但同样,我认为有更多的pandonic方式。

回答

4

尝试使用merge_asof()方法:

注意:此方法已在熊猫v.0.19.0

In [17]: pd.merge_asof(dfx, dfy, left_on='date_x', right_on='date_y') 
Out[17]: 
     date_x  date_y 
0 2015-01-15 2015-01-01 
1 2015-02-14 2015-01-01 
2 2015-03-16 2015-03-01 
3 2015-04-15 2015-03-01 
4 2015-05-15 2015-03-01 
5 2015-06-14 2015-06-14 
6 2015-07-14 2015-06-14 
+0

这是荒谬的被添加。谢谢!我觉得有点荒谬,因为这是今天第二次向我提到'merge_asof()',但是我需要几次明显地在头上杵。很棒的功能。 – pshep123

+0

如果最近的日期实际上是在该日期之后,它似乎仍然会继续前一个日期。我想它只是读我的脑海。我对此很满意。 – pshep123

+1

很好的回答:-)。 – piRSquared

相关问题