Я хочу вставить новый столбец с именем total
в final_df
, который представляет собой кумулятивную сумму value
в df
, если это происходит между временами в final_df
. Он суммирует значения, если они встречаются между start
и end
в final_df
. Так, например, в диапазоне времени с 01:30 до 02:00 в final_df
- оба индекса 0 и 1 в df
встречаются между этим временным диапазоном, поэтому общее количество равно 15 (10+5).
У меня есть два фрейма данных pandas:
дф
import pandas as pd
d = {'start_time': ['01:00','00:00','00:30','02:00'],
'end_time': ['02:00','03:00','01:30','02:30'],
'value': ['10','5','20','5']}
df = pd.DataFrame(data=d)
final_df
final_df = {'start_time': ['00:00, 00:30, 01:00, 01:30, 02:00, 02:30'],
'end_time': ['00:30, 01:00, 01:30, 02:00, 02:30, 03:00']}
final_df = pd.DataFrame(data=final_d)
выходные данные Я хочу final_df
start_time end_time total
00:00 00:30 5
00:30 01:00 25
01:00 01:30 35
01:30 02:00 15
02:30 03:00 10
Моя попытка
final_df['total'] = final_df.apply(lambda x: df.loc[(df['start_time'] >= x.start_time) &
(df['end_time'] <= x.end_time), 'value'].sum(), axis=1)
Проблема 1
Я получаю сообщение об ошибке: TypeError: («›=» не поддерживается между экземплярами «str» и «datetime.time», «произошло по индексу 0»)
Я преобразовал соответствующие столбцы в datetime следующим образом:
df[['start_time','end_time']] = df[['start_time','end_time']].apply(pd.to_datetime, format='%H:%M')
final_df[['start_time','end_time']] = final_df[['start_time','end_time']].apply(pd.to_datetime, format='%H:%M:%S')
Но я не хочу конвертировать в datetime. Есть ли способ обойти это?
Проблема 2
Сумма не работает должным образом. Он ищет только точное совпадение для временного диапазона. Итак, вывод:
start_time end_time total
00:00 00:30 0
00:30 01:00 0
01:00 01:30 0
01:30 02:00 0
02:30 03:00 5