【问题标题】:Calculate The time difference between prior row’s end_date and current row’s start_date in dataframe计算数据框中前一行的 end_date 和当前行的 start_date 之间的时间差
【发布时间】:2023-03-19 11:07:01
【问题描述】:

我有一个如下所示的数据框。我必须计算开始日期和结束日期之间的差异。 但是计算应该像下面我为一行所做的公式一样发生但我希望它对所有行都发生。

df['start_date'][1]-df['end_date'][0]

  ship_id   start_date  end_date    days_difference
0   10  2016-10-05  2016-10-06  1 days
1   10  2016-10-07  2016-10-12  5 days
2   10  2016-10-22  2016-10-24  2 days
3   10  2016-10-29  2016-11-01  3 days
4   10  2016-11-04  2016-11-06  2 days

我尝试使用 for 循环,但它没有给出正确的输出(下)它为所有行提供 8 天。

用于循环

foo = range(1,len(df)) bar = range(len(df)) 
for f, b in zip(foo, bar):
   df['new_col'] = df['start_date'][f]-df['end_date'][b]
ship_id start_date  end_date    days_difference new_col
0   10  2016-10-05  2016-10-06  1 days  8 days
1   10  2016-10-07  2016-10-12  5 days  8 days
2   10  2016-10-22  2016-10-24  2 days  8 days
3   10  2016-10-29  2016-11-01  3 days  8 days
4   10  2016-11-04  2016-11-06  2 days  8 days

我想要的预期输出,最后我想按 ship_id 汇总天数

ship_id start_date  end_date    days_difference new_col
0   10  2016-10-05  2016-10-06  1 days  1 days
1   10  2016-10-07  2016-10-12  5 days  10 days
2   10  2016-10-22  2016-10-24  2 days  5 days
3   10  2016-10-29  2016-11-01  3 days  3 days
4   10  2016-11-04  2016-11-06  2 days

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    使用shift:

    df['new_col'] = df['start_date'].sub(df['end_date'].shift()).shift(-1)
    print(df)
    
    # Output
       ship_id start_date   end_date new_col
    0       10 2016-10-05 2016-10-06  1 days
    1       10 2016-10-07 2016-10-12 10 days
    2       10 2016-10-22 2016-10-24  5 days
    3       10 2016-10-29 2016-11-01  3 days
    4       10 2016-11-04 2016-11-06     NaT
    

    df['end_date'].sub(df['start_date'].shift(-1)).abs()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 2015-05-25
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多