Вычисления с использованием двух информационных кадров в Pandas - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь вычислить следующее:

Когда есть

df1 (кадр данных со скоростью символов (char_speed) субтитра, который начинается в start_time и заканчиваетсяв end_time):

  char_speed  start_time  end_time
0         34           3        15
1         19          15        21
2          9          21        28
...

и

df2 (фрейм данных, в котором есть журнал прослушивания пользователя, который начинается с start_time и заканчивается на end_time с speed, указанным пользователемпрослушивается с таким интервалом):

  start_time  end_time  speed
0       9.23    20.929    1.0 
1        1.4     20.26    1.5
2       20.0      27.6   1.25
...

, а затем вычисляется общее количество символов за каждый интервал:

  start_time  end_time  speed  total_char
0       9.23    20.929    1.0        
1        1.4     20.26    1.5
2       20.0      27.6   1.25
... 

Например, df2['total_char'].iloc[0] будет

((15-9.23)*34) + ((20.929-15)*19) 

как период времени 9,23 ~ 20,929,

в течение 9,23 ~ 15, скорость будет 34,

в течение 15 ~ 20,929, скорость будет 19

и df2['total_char'].iloc[1] будет

(3-1.4)*0 + ((15-3)*34) + ((20.26-15)*19)

, так как между периодами времени 1,4 ~ 20,26,

в течение 1,4 ~ 3 скорость не найдена в df1, поэтому 0

в течение 3 ~ 15, скорость будет 34

, в течение 15 ~ 20.26, скорость будет 19

Я новичок в Пандах, и недавно я был загипнотизирован тем, как Паndas может быть эффективен в коротких и простых кодировках, но я не уверен, есть ли способ вычислить это в коротком и простом кодировании.Прямо сейчас я могу только придумать способ сделать это без использования функций Pandas: вызвать каждую строку df2, а затем выполнить поиск по каждой строке в df1 и затем вычислить ее.

Было бы полезноесли бы вы могли сказать мне способ эффективно кодировать это с помощью Pandas.Или любая рекомендация функций тоже будет полезна!

Заранее спасибо!:)

1 Ответ

0 голосов
/ 24 февраля 2019

Если вы не против слияния фреймов данных, то apply облегчает задачу.

df2 = pd.concat([df1, df2], axis=1, sort=False)

def speed_calc(row):
    return ((row['end_time1']-row['start_time1'])*row['char_speed']) + \
    ((row['end_time2']-row['end_time1'])*row['char_speed'])

df2['total_char'] = df2.apply(speed_calc, axis=1)

Для этого потребуется настроить имена заголовков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...