【发布时间】:2020-11-04 13:11:54
【问题描述】:
我收到的数据包含“开始时间”和“持续时间”的活动时间。当我需要在多天的指定时间范围内进行计算时,这很难处理。我想将这些数据分解为微小的数据,以使未来的计算更容易。请查看示例以获得更好的理解。
我目前拥有的数据:
data = {'StartTime':['2018-12-30 12:45:00+11:00','2018-12-31 16:48:00+11:00','2019-01-01 04:36:00+11:00','2019-01-01 19:27:00+11:00','2019-01-02 05:13:00+11:00'],
'Duration':[1,1,3,1,2],
'Site':['1','2','3','4','5']
}
df = pd.DataFrame(data)
df['StartTime'] = pd.to_datetime(df['StartTime']).dt.tz_localize('utc').dt.tz_convert('Australia/Melbourne')
我想要什么:
data_expected = {'Time':['2018-12-30 12:45:00+11:00','2018-12-31 16:48:00+11:00','2019-01-01 04:36:00+11:00','2019-01-01 04:37:00+11:00','2019-01-01 19:27:00+11:00','2019-01-02 05:13:00+11:00','2019-01-02 05:14:00+11:00'],
'Duration':[1,1,1,1,1,1,1],
'Site':['1','2','3','3','4','5','5']
}
df_expected = pd.DataFrame(data_expected)
df_expected['Time'] = pd.to_datetime(df_expected['Time']).dt.tz_localize('utc').dt.tz_convert('Australia/Melbourne')
我想看看是否有人对此问题有好的解决方案。实际上,对于超过 1 分钟的持续时间,我需要将 Duration >1 的数据行以 +1 分钟的时间复制。有没有办法在不创建全新数据框的情况下做到这一点?
********编辑********
回应@DavidErickson 的回答。把它放在这里是因为我不能把图像放在 cmets 中。我遇到了一些麻烦。 df1 是原始数据帧的子集。 df2 是 df1 应用提供的代码后。您可以看到添加到索引 635 的时间不正确。
【问题讨论】:
-
这部分代码
.dt.tz_localize('utc').dt.tz_convert('Australia/Melbourne')的语法对我不起作用。您可以使用我的答案并找出语法作为转换到另一个时区的最后一步。 -
可以持续时间大于2吗?
-
@jlandercy 是的,它可以大于 2
-
@DavidErickson 抱歉,这是我的错误。我将 df_expected 中的列名从“StartTime”更改为“Time”,以尝试突出显示时间数据的变化。我将进行编辑以解决此问题。
标签: python pandas time aggregate duration