python - 使用 datetime pandas 根据持续时间创建行
问题描述
我面临使用日期时间编写代码的问题。我已经创建了一个我正在处理的场景。有人可以帮我解决代码。
输入:
Name, Channel, Duration, Start_time
John, A, 2, 16:00:00
Joseph, B, 3, 15:05:00
输出:
Name, Channel, Duration, Start_time
John, A, 2, 16:00:00
John, A, 2, 16:01:00
Joseph, B, 3, 15:05:00
Joseph, B, 3, 15:06:00
Joseph, B, 3, 15:07:00
先感谢您。
解决方案
采用:
df['Start_time'] = pd.to_timedelta(df['Start_time'])
df = df.loc[df.index.repeat(df['Duration'])]
td = pd.to_timedelta(df.groupby(level=0).cumcount() * 60, unit='s')
df['Start_time'] = df['Start_time'] + td
df = df.reset_index(drop=True)
print (df)
Name Channel Duration Start_time
0 John A 2 16:00:00
1 John A 2 16:01:00
2 Joseph B 3 15:05:00
3 Joseph B 3 15:06:00
4 Joseph B 3 15:07:00
说明:
- 首次转换列
Start_time
to_timedelta
- 然后
repeat
按列索引值Duration
并按重复行loc
- 按每个索引值创建计数器
cumcount
并将其转换为 1 分钟时间增量,这些时间增量将添加到新的重复列中Start_time
- 最后
reset_index
带有参数drop=True
以避免重复的索引值
编辑:
如果希望输出解决方案中的日期时间相同,则只需先转换值to_datetime
:
df['Start_time'] = pd.to_datetime(df['Start_time'])
df = df.loc[df.index.repeat(df['Duration'])]
td = pd.to_timedelta(df.groupby(level=0).cumcount() * 60, unit='s')
df['Start_time'] = df['Start_time'] + td
df = df.reset_index(drop=True)
print (df)
Name Channel Duration Start_time
0 John A 2 2018-11-19 16:00:00
1 John A 2 2018-11-19 16:01:00
2 Joseph B 3 2018-11-19 15:05:00
3 Joseph B 3 2018-11-19 15:06:00
4 Joseph B 3 2018-11-19 15:07:00
推荐阅读
- reactjs - 创建反应应用程序在创建包后无法处理。json
- node.js - 在 windows7 中安装节点时出错
- azure - 以编程方式同意我的租户中的多租户应用程序
- python - 使用 pyinstaller 将 pytest 与 pytest_html 模块一起打包
- firebase-cloud-messaging - 有没有办法在 FirebaseMessagingService 中获取 LifecycleOwner
- python - 通过连接最后一维中的数字来减少张量
- ios - 从其他视图导航后,我的程序化侧边菜单的导航栏不会出现
- python - 在 Django 中向 UserCreationForm 添加占位符
- unity3d - 统一创建匿名高分者
- java - java中的mongodb,如何在聚合函数中使用日期范围