Быстрый способ создания переменной в кадре данных как функции других переменных и значений в другом кадре данных? - PullRequest
1 голос
/ 14 мая 2019

У меня есть первый фрейм данных людей (df_id), который вводит данные в start_time и выходит из них в end_time.

У меня есть другой фрейм данных (df_time), который дает мне значение переменной x в каждый момент времени.

Я хочу создать новую переменную в df_id, которая даст мне для каждого индивидуума среднее значение x от времени начала и окончания индивидуума.

Я смог сделать это только зацикливаясь на каждом отдельном человеке, что занимает очень много времени. Есть ли более быстрый способ сделать это?

Вот что я попробовал:

import pandas as pd 

data_id = {'id':[1, 2, 3], 'start_time':[1, 2, 4], 'end_time':[2, 4, 5]}
df_id = pd.DataFrame(data_id) 

data_time = {'time': list(range(1,6)), 'x': [2,2,4,5,3] }
df_time = pd.DataFrame(data_time) 

# This works, but is way too slow
for i, row in df_id.iterrows():
    start = row['start_time']-1
    end = row['end_time']
    df_id.at[i,'mean_x'] = ((df_time['x'][start:end])).mean()

Большое спасибо!

1 Ответ

0 голосов
/ 14 мая 2019

Используйте apply () вместо iterrows. Это сократит время выполнения в два раза

import pandas as pd 

df_id = pd.DataFrame({'id':[1, 2, 3], 'start_time':[1, 2, 4], 'end_time':[2, 4, 5]}) 
df_time = pd.DataFrame({'time': list(range(1,6)), 'x': [2,2,4,5,3]}) 

df_id['mean_x'] = df_id.apply(lambda row: df_time['x'][row['start_time']-1:row['end_time']].mean(), axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...