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

2024-04-18 21:30:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,有3列,其中第一列是datetime

看起来像这样

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

我想不出一个合适的方法来做这件事


Tags: 数据方法datetime间隔小时level2level1
2条回答

您可以创建原始数据帧的副本,其中Datetime列每增加15分钟,然后使用^{}后跟^{}获得最终结果:

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')

将datetime设置为索引(转换为datetime后),并使用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

NB:你的问题是时间间隔为15分钟,你的最新时间是下午3点,而不是下午4点,这在你的数据中是共享的

相关问题 更多 >