合并和排序日期时间列
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
你可以 melt
和 cumsum
±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
假设我有行程开始和结束日期时间信息的数据,并且我有 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
你可以 melt
和 cumsum
±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