合并和排序日期时间列

Combine and sort datetime columns

假设我有行程开始和结束日期时间信息的数据,并且我有 100 辆车。

我想在一列中合并和排序行程开始和结束日期,并跟踪公园区域的车辆数量。如果 driver 开始旅行,车辆数量减少 1,如果旅行结束则增加 1。

trips = {
    'driver':['Tom', 'Tom', 'Max'],
         
    'start': ['2022-01-03 13:56:03',
              '2022-01-04 10:21:06',
              '2022-01-04 11:38:39'],
         
     'end':  ['2022-01-03 15:39:14',
              '2022-01-04 17:07:38',
              '2022-01-04 16:06:42'],
 }

df = pd.DataFrame(trips)

车辆数 = 100

输出

----------------------------------------------------
date                 |  driver |  type   |  count
----------------------------------------------------
2022-01-03 13:56:03  |   Tom   |  start  |   99
2022-01-03 15:39:14  |   Tom   |  end    |   100
2022-01-04 10:21:06  |   Tom   |  start  |   99
2022-01-04 11:38:39  |   Max   |  start  |   98
2022-01-04 16:06:42  |   Max   |  end    |   99
2022-01-04 17:07:38  |   Tom   |  end    |   100

你可以 meltcumsum ±1 取决于 start/end 类型:

out = (df
 .melt(id_vars='driver', var_name='type', value_name='date')
 .sort_values(by='date', ignore_index=True)
 .assign(count=lambda d: 100+d['type'].map({'start': -1, 'end': 1}).cumsum())
)

输出:

  driver   type                 date  count
0    Tom  start  2022-01-03 13:56:03     99
1    Tom    end  2022-01-03 15:39:14    100
2    Tom  start  2022-01-04 10:21:06     99
3    Max  start  2022-01-04 11:38:39     98
4    Max    end  2022-01-04 16:06:42     99
5    Tom    end  2022-01-04 17:07:38    100