У меня есть два data_frames следующим образом:
ID. Date1 X1
0002 2015-08-01 81
0002 2015-08-15 95
0003 2015-10-01 115.
0002 2015-09-15 126
0003 2015-10-15 129
0002 2016-02-01 265
0002 2016-02-15 279.
0003 2016-03-15 281.
0003 2016-03-15 281.
0002 2016-03-01 294
0003 2016-04-01 298.
0003 2016-04-01 298.
0002 2016-03-15 308
0003 2017-02-15 618
0002 2017-02-01 631.
0003 2017-03-01 632
0002 2017-02-15 645
И второе как пара:
ID. DATE2.
0002 2016-02-11
0003 2016-03-16
0002 2017-01-19
0003 2015-09-10
0003 2016-02-19
0003 2016-03-22
0003 2015-12-07
Теперь я хочу объединить –merge-- эти два data_frameworks в один data_frameна основе идентификатора и данных1 и даты2 с определенными условиями.Поэтому мой желаемый фрейм данных должен быть таким:
ID Date1 X1 Date2
0002 2015-08-01 81 Nan
0002 2015-08-15 95 Nan
0003 2015-10-01 115. 2015-09-10
0002 2015-09-15 126 Nan
0003 2015-10-15 129 Nan
0002 2016-02-01 265 Nan
0002 2016-02-15 279. 2016-02-11
0003 2016-03-15 281. 2015-12-07
0003 2016-03-15 281. 2016-02-19
0003 2016-04-01 298. 2016-03-16
0003 2016-04-01 298. 2016-03-22
0002 2016-03-15 308 Nan
0003 2017-02-15 618 Nan
0002 2017-02-01 631. 2017-01-19
0003 2017-03-01 632 Nan
0002 2017-02-15 645 Nan
Допустим, Date1 указывает на дату собранных данных, а Date2 ссылается на событие.Мне нужно показать в выходной DataFrame, произошло ли событие между двумя датами сбора данных.Например, для ID: 003 между 2015-10-01 и 2015-10-15, произошло событие или нет?В этом примере разница составляет 15 дней, но у нас есть случай, когда разница между собранными данными составляет более одного месяца, например, ID: 002 2015-10-15 и 2016-02-15.Кроме того, если между двумя датами (в Date1) произошли два события, я хочу показать их в разных строках, как в примере выше.Кто-нибудь может помочь справиться с этим?
Я также попробовал этот код:
myf = dataframe1.merge(dataframe2, how='left',on=['ID'])
mask = (pd.to_datetime(myf['Data1'], format='%Y-%m-%d') -
pd.to_datetime(myf['Data2'], format='%Y-%m-%d')).apply(lambda I: i.days <= 15 and i.days > 0)
myf.loc[~mask, 'Data2'] = np.nan
Но он решает только если данные собираются (в dataframe1) каждые 15 дней, что в моемдело это не всегда верно.