我有一个包含有关商店信息的DataFrame。看起来如下:
date | store_id | x
2019-01-01| 1 | 5
2019-01-01| 2 | 1
2019-01-05| 1 | 3
...
多重索引是[date
,store_id
]。请注意,日期不是唯一的。
我想每小时对数据进行一次采样,但只对date
列中的几天进行采样,即,我不想在这之间的每一小时都进行填充。此外,我想为创建的每个小时填写x的值。因此,上述示例的预期结果将是
date | store_id | x
2019-01-01 00:00:00| 1 | 5
2019-01-01 01:00:00| 1 | 5
2019-01-01 02:00:00| 1 | 5
...
2019-01-01 23:00:00| 1 | 5
2019-01-01 00:00:00| 2 | 1
2019-01-01 01:00:00| 2 | 1
2019-01-01 02:00:00| 2 | 1
...
2019-01-01 23:00:00| 2 | 1
2019-01-05 00:00:00| 1 | 3
2019-01-05 01:00:00| 1 | 3
2019-01-05 02:00:00| 1 | 3
...
2019-01-05 23:00:00| 1 | 3
答案 0 :(得分:1)
定义以下“复制”功能:
def repl(row):
return pd.DataFrame({'date': pd.date_range(start=row.date,
periods=24, freq='H'),'store_id': row.store_id, 'x': row.x})
它“复制”源行(参数),返回一系列行 与给定的日期连续几个小时。
然后:
执行此操作的代码是:
pd.concat(df.reset_index().apply(repl, axis=1).tolist(), ignore_index=True)