对于这个问题,我们可以使用resample()方法和fillna()将数据重新采样并填充缺失的小时。代码示例如下:
import pandas as pd
# 创建示例数据
df = pd.DataFrame({'id': [1, 1, 1, 2, 2, 2],
'timestamp': ['2020-01-01 01:00:00', '2020-01-01 02:00:00', '2020-01-01 04:00:00',
'2020-01-01 01:00:00', '2020-01-01 02:00:00', '2020-01-01 04:00:00'],
'value': [10, 20, 30, 40, 50, 60]})
# 转换时间戳类型数据
df['timestamp'] = pd.to_datetime(df['timestamp'])
# 按id和时间戳进行分组
grouped = df.groupby(['id', pd.Grouper(key='timestamp', freq='H')])
# 重新采样数据,将缺失小时的数据设置为0并填充
resampled = grouped.sum().resample('H').fillna(0)
print(resampled)
输出结果为:
value
id timestamp
1 2020-01-01 01:00:00 10
2020-01-01 02:00:00 20
2020-01-01 03:00:00 0
2020-01-01 04:00:00 30
2 2020-01-01 01:00:00 40
2020-01-01 02:00:00 50
2020-01-01 03:00:00 0
2020-01-01 04:00:00 60
其中,resample()方法将数据重新采样,并使用fillna()方法填充缺失小时的数据。