Сопоставьте части фреймов данных и добавьте новые значения столбцов, используя значения из обоих - PullRequest
2 голосов
/ 12 апреля 2019

У меня есть 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"] = ???
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...