假设我有旅行开始和结束日期的信息,我有100辆车。
我想结合和排序旅行开始和结束日期在一栏,并跟踪在公园地区的车辆数量。如果一名司机开始一次旅行,车辆数量减少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
发布于 2022-06-01 21:34:20
根据开始/结束类型,您可以使用melt
和cumsum
±1:
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
https://stackoverflow.com/questions/72468128
复制相似问题