为了账号安全,请及时绑定邮箱和手机立即绑定

以每小时为间隔插入 15 分钟的日期时间

以每小时为间隔插入 15 分钟的日期时间

开满天机 2022-11-29 17:10:45
我有一个包含 3 列的数据框,其中第一列是日期时间。看起来像这样Datetime            Level1   Level22016-02-24 01:00    12       152016-02-24 02:00    14       132016-02-24 03:00    8        12现在我想在每小时值之间添加 15 分钟的间隔值。但是,Level1 和 Level2 获得的值与其前一小时相同。它应该是这样的:Datetime            Level1   Level22016-02-24 01:00    12       152016-02-24 01:15    12       152016-02-24 01:30    12       152016-02-24 01:45    12       152016-02-24 02:00    14       132016-02-24 02:15    14       132016-02-24 02:30    14       132016-02-24 02:45    14       132016-02-24 03:00    8        122016-02-24 03:15    8        122016-02-24 03:30    8        122016-02-24 03:45    8        12我想不出如何正确执行此操作的方法。
查看完整描述

2 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

将日期时间设置为索引(在转换为日期时间之后),并使用带有前向填充的 asfreq 方法用以前的值填充空值:


#thanks to @a_guest for the cleaned sample data


df = pd.DataFrame(

    data=[['2016-02-24 01:00', 12, 15],

          ['2016-02-24 02:00', 14, 13],

          ['2016-02-24 03:00',  8, 12]],

    columns=['Datetime', 'Level1', 'Level2']

)

df['Datetime'] = pd.to_datetime(df['Datetime'])


df = df.set_index('Datetime')


df.asfreq('15min',method='pad')


                 Level1 Level2

Datetime        

2016-02-24 01:00:00 12  15

2016-02-24 01:15:00 12  15

2016-02-24 01:30:00 12  15

2016-02-24 01:45:00 12  15

2016-02-24 02:00:00 14  13

2016-02-24 02:15:00 14  13

2016-02-24 02:30:00 14  13

2016-02-24 02:45:00 14  13

2016-02-24 03:00:00 8   12

注意:您的问题是时间间隔为 15 分钟,您的最晚时间是下午 3 点,而不是数据中共享的下午 4 点。


查看完整回答
反对 回复 2022-11-29
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

您可以创建原始数据框的副本,其中您Datetime每次将列递增 15 分钟,然后使用pd.concatfollowed bysort_values获得最终结果:

from datetime import timedelta

import pandas as pd


df = pd.DataFrame(

    data=[['2016-02-24 01:00', 12, 15],

          ['2016-02-24 02:00', 14, 13],

          ['2016-02-24 03:00',  8, 12]],

    columns=['Datetime', 'Level1', 'Level2']

)

df['Datetime'] = pd.to_datetime(df['Datetime'])


intervals = [df]

while len(intervals) < 4:

    new = intervals[-1].copy()

    new['Datetime'] += timedelta(minutes=15)

    intervals.append(new)


result = pd.concat(intervals).sort_values(by='Datetime')


查看完整回答
反对 回复 2022-11-29
  • 2 回答
  • 0 关注
  • 91 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信