Интеграция фрейма данных с несколькими условиями? - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть два 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 дней, что в моемдело это не всегда верно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...