У меня есть два фрейма данных, первый имеет вид (обратите внимание, что даты являются объектами datetime):
df = DataFrame('key': [0,1,2,3,4,5],
'date': [date0,date1, date2, date3, date4, date5],
'value': [0,10,20,30,40,50])
И вторая, которая имеет вид:
df2 = DataFrame('key': [0,1,2,3,4,5],
'valid_from': [date0, date0, date0, date3, date3, date3],
'valid_to': [date2, date2, date2, date5, date5, date5],
'value': [0, 100, 200, 300, 400, 500])
И я пытаюсь эффективно объединиться, где совпадают ключи, а дата находится между действительными_from и valid_to. Я придумал следующее:
def map_keys(df2, key, date):
value = df2[df2['key'] == key &
df2['valid_from'] <= date &
df2['valid_to'] >= date]['value'].values[0]
return value
keys = df['key'].values
dates = df['date'].values
keys_dates = zip(keys, dates)
values = []
for key_date in keys_dates:
value = map_keys(df2, key_date[0], key_date[1])
values.append(value)
df['joined_value'] = values
В то время как это, похоже, делает работу, это не похоже на особенно элегантное решение. Мне было интересно, есть ли у кого-нибудь лучшее предложение для такого объединения.
Спасибо, что помогли - это очень ценно.