首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >基于开始日期和结束日期的重复行

基于开始日期和结束日期的重复行
EN

Stack Overflow用户
提问于 2018-10-08 23:37:08
回答 1查看 349关注 0票数 1

我无法找到如何执行以下操作的方法:我的数据如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Time (CET)        Start              Duration(min)  End
2015-02-01 00:00  2015-02-01 00:00   2              2015-02-01 00:02

我想要的是,每一行(包含条目,很多不包含)都会根据持续时间或结束日期复制,其方式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Time (CET)        Start              Duration(min)  End
2015-02-01 00:00  2015-02-01 00:00   2              2015-02-01 00:02
2015-02-01 00:01  2015-02-01 00:00   2              2015-02-01 00:02
2015-02-01 00:02  2015-02-01 00:00   2              2015-02-01 00:02

最后,不再需要开始列和结束列。我考虑过使用shift,但不确定它是否是立即的,以及如何使用参数freq。有什么办法吗?

时间列采用日期时间格式,时间(CET)是索引。

谢谢你一吨!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-08 23:41:18

您可以通过Index.repeat使用loc重复行,并将cumcountto_timedelta创建的时间差添加到列Time (CET)中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print (df)
         Time (CET)             Start  Duration(min)               End
0  2015-02-01 00:00  2015-02-01 00:00              2  2015-02-01 00:02
1  2015-02-02 00:00  2015-02-02 00:00              3  2015-02-02 00:02

#convert columns to datetimes
c = ['Time (CET)','Start','End']
df[c] = df[c].apply(pd.to_datetime)

df = df.loc[df.index.repeat(df['Duration(min)'] + 1)]
df['Time (CET)'] += pd.to_timedelta(df.groupby(level=0).cumcount(), unit='s') * 60
df = df.reset_index(drop=True).drop(['Start','End'], axis=1)
print (df)
           Time (CET)  Duration(min)
0 2015-02-01 00:00:00              2
1 2015-02-01 00:01:00              2
2 2015-02-01 00:02:00              2
3 2015-02-02 00:00:00              3
4 2015-02-02 00:01:00              3
5 2015-02-02 00:02:00              3
6 2015-02-02 00:03:00              3
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52715649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文