【问题标题】:Insert 15 min datetime in hourly intervals以每小时间隔插入 15 分钟的日期时间
【发布时间】:2020-05-20 18:54:10
【问题描述】:

我有一个包含 3 列的数据框,其中第一列是日期时间。

看起来像这样

Datetime            Level1   Level2
2016-02-24 01:00    12       15
2016-02-24 02:00    14       13
2016-02-24 03:00    8        12

现在我想在每小时值之间添加 15 分钟的间隔值。但是,Level1 和 Level2 的值与其前一小时相同。它应该是这样的:

Datetime            Level1   Level2
2016-02-24 01:00    12       15
2016-02-24 01:15    12       15
2016-02-24 01:30    12       15
2016-02-24 01:45    12       15
2016-02-24 02:00    14       13
2016-02-24 02:15    14       13
2016-02-24 02:30    14       13
2016-02-24 02:45    14       13
2016-02-24 03:00    8        12
2016-02-24 03:15    8        12
2016-02-24 03:30    8        12
2016-02-24 03:45    8        12

我想不出如何正确地做到这一点。

【问题讨论】:

    标签: python pandas datetime


    【解决方案1】:

    将日期时间设置为索引(转换为日期时间后),并使用带有前向填充的 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 点,正如您的数据中所共享的那样。

    【讨论】:

    • 如果我们想看到03:00的季度,在这种情况下我们应该怎么做?那么如果我们希望时间间隔在 03:45 结束,我们会怎么做?
    【解决方案2】:

    您可以创建原始数据框的副本,将 Datetime 列每增加 15 分钟,然后使用 pd.concat 后跟 sort_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')
    

    【讨论】:

      猜你喜欢
      • 2020-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多