В Python Pandas, как сравнивать разные строки в одном кадре данных без использования цикла for - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь, чтобы Python Pandas вычислял значение на основе значения в ячейке в текущей строке и ячейке в предыдущей строке.У меня есть следующий упрощенный кадр данных, в котором я пытаюсь вычислить время между текущим расчетным временем прибытия и временем посадки предыдущего самолета.У меня есть расписание рейсов, которое я конвертирую в формат даты и времени.

import pandas as pd

f = {'Estimated_Arrival_Time': pd.Series(['08:09', '08:39', '08:50']),
      'Landing_Time': pd.Series(['08:10', '08:45', '09:10'])}
Flight_df = pd.DataFrame(f)

Flight_df.loc[:,'Estimated_Arrival_Time'] = pd.to_datetime(Flight_df.loc[:,'Estimated_Arrival_Time'],format='%H:%M')
Flight_df.loc[:,'Landing_Time'] = pd.to_datetime(Flight_df.loc[:,'Landing_Time'],format='%H:%M')

Прямо сейчас я решил сравнение, написав цикл for.Тем не менее, мне интересно, если это возможно, чтобы закодировать это без использования цикла for, но с использованием свойств панд и фреймов данных.

for i in xrange(len(Flight_df)):
    if i == 0:
        Flight_df.loc[i,'Inter_arrival_time'] = pd.Timedelta(0,'s')
    else:
        Flight_df.loc[i,'Inter_arrival_time'] = Flight_df.at[ i,'Estimated_Arrival_Time'] - Flight_df.at[(i-1),'Landing_Time']

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Вы можете использовать смену и заполнить NaN позже 0 Flight_df['Estimated_Arrival_Time'] = pd.to_datetime(Flight_df['Estimated_Arrival_Time'])

Flight_df['Inter_arrival_time'] = Flight_df.Estimated_Arrival_Time - Flight_df.Estimated_Arrival_Time.shift(1)
0 голосов
/ 27 сентября 2019

IIUC, вы хотите pd.Series.shift():

Flight_df['Inter_arrival_time'] = Flight_df['Estimated_Arrival_Time'] - Flight_df['Landing_Time'].shift()

Вывод:

0        NaT
1   00:29:00
2   00:05:00
dtype: timedelta64[ns]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...