【问题标题】:Within Python Pandas, how to compare different rows in one dataframe without using a for loop在 Python Pandas 中,如何在不使用 for 循环的情况下比较一个数据帧中的不同行
【发布时间】:2019-09-27 13:04:38
【问题描述】:

我正在尝试让 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 循环而是利用 pandas 和 dataframes 的属性来编写代码。

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']

【问题讨论】:

    标签: python pandas dataframe compare


    【解决方案1】:

    您可以使用移位操作,稍后用 0 填充 NaN 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)
    

    【讨论】:

      【解决方案2】:

      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]
      

      【讨论】:

        猜你喜欢
        • 2023-03-19
        • 2023-03-06
        • 1970-01-01
        • 2017-02-28
        • 2020-10-14
        • 2018-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多