Я создаю новые столбцы на основе некоторых данных из другого фрейма данных и некоторых данных из фрейма данных, которые я хочу расширить.
У меня есть рабочее решение, но мне интересно узнать, существует ли векторизованный подход, поскольку в настоящее время требуется довольно много времени, чтобы использовать метод pandas.apply () (который перебирает строки под капотом).
Функция, которая выполняет преобразование:
import pandas as pd
def add_new_columns(row, **kwds):
participant = row['participant']
time = row['time']
### NOTE ###
# There is some other code here which handles cases where other
# dataframe does not contain information, in that case we impute
return pd.Series(kwds['other_df'].loc[participant, time])
иоператор, который вызывает вышеуказанную функцию:
main_df = pd.merge(
main_df,
main_df.apply(
add_new_columns,
axis=1,
other_df=other_df
),
left_index=True,
right_index=True
)
Базовый пример некоторых наборов данных, которые будут работать с вышеуказанным кодом:
main_df = pd.DataFrame(
[
['001', 'P1', 3, 'jumped'],
['002', 'P3', 8, 'yawned'],
['004', 'P2', 7, 'made something up']
],
columns=['id', 'participant', 'time', 'action']
).set_index('id')
other_df = pd.DataFrame(
[
['P1', 3, 2, 9, 8],
['P3', 8, 5, 6, 3],
['P2', 7, 9, 8, 5]
],
columns=['participant', 'time', 'sugar-levels', 'some-other-measure', 'some-other-measure2']
).set_index(['participant', 'time'])
Мои данные имеют длину 800 000 строк.Я хотел бы избежать итерации, если это возможно.Есть ли в пандах другие методы, которые могут помочь?