назначение значения между двумя кадрами данных зависит от метки времени и идентификатора

#python #pandas

#питон #панды

Вопрос:

Я ищу решение для присвоения key значения от dummy до dummy2 , когда ;

  1. start столбец от dummy2 , находится во временном диапазоне dummy начального и конечного столбцов.
  2. dummy и dummy2 имеют одинаковое значение идентификатора.

Однако start столбик dummy и dummy2 не совсем маха.

Вот два кадра данных :

 dummy = pd.DataFrame({  'ID' : ['A','B','B','D'],  'start': ['2021-10-28 10:40:00', '2021-10-15 09:20:00',   '2021-10-26 09:20:00', '2021-11-04 12:19:00'],  'end': ['2021-10-28 17:46:00', '2021-10-15 15:10:00',  '2021-10-26 12:10:00', '2021-11-04 16:25:00'],  'key' : [1,2,3,4]  })   dummy2 = pd.DataFrame({  'ID' : ['A','B','B','D'],  'start': ['2021-10-28 10:39:00', '2021-10-15 09:25:00',   '2021-10-26 09:24:00', '2021-11-04 12:18:00'],  'end': ['2021-10-28 17:49:00', '2021-10-15 15:11:00',  '2021-10-26 12:13:00', '2021-11-04 16:22:00'],  })  dummy.start = pd.to_datetime(dummy.start) dummy.end = pd.to_datetime(dummy.end) dummy2.start = pd.to_datetime(dummy2.start) dummy2.end = pd.to_datetime(dummy2.end)  

Это то, что я пробовал :

 from datetimerange import DateTimeRange dummy2['key'] = np.nan for z in range(len(dummy)) :  time = DateTimeRange(dummy.st[z] - datetime.timedelta(seconds=300),   dummy.ed[z]   datetime.timedelta(seconds=300))   for i in range(len(dummy2)):  if (dummy2['start'][i] in time) amp; (dummy2['ID'][z] == dummy['ID'][i]):  dummy2['key'][i] = dummy['key'][z]  
  1. Создано datetimerange для манекена и дает и — 5 минут из-за метки dummy времени и dummy2 не совсем совпадают
  2. Использование циклов for для определения start столбца из dummy2 , находится в диапазоне времени и имеет ли он одинаковое значение идентификатора.

Это мой ожидаемый результат :

 dummy2   ID start end key 0 A 2021-10-28 10:39:00 2021-10-28 17:49:00 1 1 B 2021-10-15 09:25:00 2021-10-15 15:11:00 2 2 B 2021-10-26 09:24:00 2021-10-26 12:13:00 3 3 D 2021-11-04 12:18:00 2021-11-04 16:22:00 4  

Комментарии:

1. у вас есть дополнительная логика в вашем коде; пожалуйста, добавьте эти условия в свое объяснение