首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >合并和排序日期时间列

合并和排序日期时间列
EN

Stack Overflow用户
提问于 2022-06-01 21:14:42
回答 1查看 21关注 0票数 0

假设我有旅行开始和结束日期的信息,我有100辆车。

我想结合和排序旅行开始和结束日期在一栏,并跟踪在公园地区的车辆数量。如果一名司机开始一次旅行,车辆数量减少1,如果旅行结束,则增加1。

代码语言:javascript
运行
复制
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

输出

代码语言:javascript
运行
复制
----------------------------------------------------
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-01 21:34:20

根据开始/结束类型,您可以使用meltcumsum±1:

代码语言:javascript
运行
复制
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())
)

输出:

代码语言:javascript
运行
复制
  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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72468128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档