У меня есть 2 кадра данных различной длины.
Датафрейм А выглядит так:
time_A | Column_2 | Column_3
00:00:00 | Type A | ...
... | ... | ...
23:55:00 | Type A | ...
00:00:00 | Type B | ...
... | ... | ...
23:55:00 | Type B | ...
00:00:00 | Type C | ...
... | ... | ...
23:55:00 | Type C | ...
Time_A имеет тип string и содержит менее 1000 строк.
Dataframe B выглядит так:
time_B | Column_4 | Column_5
12/04/2019 00:00 | abc | ...
12/04/2019 00:00 | def | ...
... | ... | ...
12/04/2019 23:55 | ghi | ...
12/04/2019 23:55 | klm | ...
Time_B также имеет тип string и содержит около 200000 строк.
Теперь у меня есть диапазон времени в качестве объектов даты и времени. Допустим,
[datetime.time(11, 0), datetime.time(20, 30)]
Я хочу добавить новый столбец (Column_6) для всех строк, которые имеют time_B внутри указанного выше диапазона.
Значение отдельных ячеек Column_6 взято из чего-то вроде следующего:
for each_cell_with_time_B_inside_range:
current_time = current_time_B
df_B.["Column_6"] = each_Column_3_cell_with_current_time / sum(Column_3_of_type_x) * funct(each_Column_3_cell)
или еще с примером:
if total_2025_typeC = 100 --> we added all type C column_3 for 20:25:00
and current_column_3 = 20 --> the only value for type C 20:25:00 is 20
then column_6 = (20/100) * formula(20)
До сих пор я использовал:
newdf_index = df_B.index[(df_B["time_B"] >= range[0]) & (df_B["time_B"] <= range[1])].tolist()
, чтобы получить индексы строк из df_B, для которых я добавлю новые значения в новый столбец. Я также играл с loc, iloc, strftime, strptime и множеством комбинаций, которые сблизили меня, но потерпели неудачу по многим причинам, которые я не могу записать.
Мой мозг уже зажарен. Любая помощь будет оценена.
Может быть что-то вроде:
df_B.loc[df_B.index[indexes_where_time_B_is_within_range], "Column_6"] = ???