用多索引重新采样熊猫

时间:2019-10-31 22:21:51

标签: python pandas

我有一个包含有关商店信息的DataFrame。看起来如下: date | store_id | x 2019-01-01| 1 | 5 2019-01-01| 2 | 1 2019-01-05| 1 | 3 ...

多重索引是[datestore_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

1 个答案:

答案 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)