比较熊猫中的两个日期时间

时间:2018-12-07 07:28:36

标签: python pandas

我在熊猫中有以下两个数据框

trans_df
code     price       date           time        product
12023    71.23       01-01-2018     06:23:00    MS  
12023    61          01-01-2018     07:56:00    HS
12023    71.23       01-01-2018     08:34:00    MS
12023    71.30       01-01-2018     06:03:00    MS  
12023    61          01-01-2018     11:43:00    HS
12023    71.23       01-01-2018     10:11:00    MS
12023    71.23       01-01-2018     04:23:00    MS

master_price
code  price  effective_date_from    effective_date_to  time_from   time_to  product
12023 71.23  01-01-2018             02-01-2018         06:00:00    05:59:00  MS     
12023 61     01-01-2018             02-01-2018         06:00:00    05:59:00  HS 
12023 72.23  01-01-2018             02-01-2018         10:00:00    05:59:00  MS   

我想要的数据框是

trans_df
code     price       date           time        product   flag     price
12023    71.23       01-01-2018     06:23:00    MS        match    71.23
12023    61          01-01-2018     07:56:00    HS        match    61
12023    71.23       01-01-2018     08:34:00    MS        match    71.23
12023    71.30       01-01-2018     06:03:00    MS        mismatch 71.30
12023    61          01-01-2018     11:43:00    HS        match    61
12023    71.23       01-01-2018     10:11:00    MS        mismatch 72.23 
12023    71.23       01-01-2018     14:23:00    MS        mismatch 72.23

逻辑是,我想比较在trans_df中为MS和HS设置的价格在日期时间和master_price中的价格范围内 一天中可能会有两种不同的价格变化。

例如在master_price中于2018年1月1日的06:00:00(即71.23),下一次价格更改是在10:00:00,因此在06:00:00- 10:00:00之间发生的交易应收取价格72.23,直到1 {0:00},71.23effective_date_to为止,如果我们发现价格不匹配,则将其标记为mismatch,且价格正确。

1 个答案:

答案 0 :(得分:0)

遵循Merging two dataframes based on a date between two other dates without a common column中的方法,

此方法用于:

  1. 通过联接两个表之间的直角积 产品领域
  2. 过滤掉日期不一致的行
  3. 根据行是否匹配创建标志列

对于大量行,此解决方案将不是最佳选择。