You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Pandas中如何基于现有MultiIndex创建新的索引层级?

实现步骤

我们可以通过提取原datetime层级、做分钟舍入后追加为新索引层级的方式实现,以下是完整可运行的代码示例:

1. 构造测试用MultiIndex(已有索引的可以跳过这一步)

import pandas as pd

# 示例:构造由datetime、行号组成的双层MultiIndex
dt_level = pd.date_range("2024-05-20 09:02:15", periods=6, freq="22s")
row_level = [1,2,3,4,5,6]
original_midx = pd.MultiIndex.from_arrays(
    [dt_level, row_level],
    names=["raw_datetime", "row_number"]
)

2. 核心操作:舍入datetime并追加新层级

# 提取datetime层级,舍入到最近分钟
rounded_min = original_midx.get_level_values("raw_datetime").round("min")

# 方法1:直接在原索引基础上追加新层级,新层级默认排在最后
new_midx = original_midx.append_levels([rounded_min], names=["rounded_minute"])

# 方法2:如果需要自定义层级顺序,可以直接重新构造MultiIndex
new_midx = pd.MultiIndex.from_arrays(
    [rounded_min, original_midx.get_level_values("raw_datetime"), original_midx.get_level_values("row_number")],
    names=["rounded_minute", "raw_datetime", "row_number"]
)

3. 结果验证

执行print(new_midx)可以看到新的索引结构如下,已经成功新增了舍入后的分钟层级:

MultiIndex([('2024-05-20 09:02:00', '2024-05-20 09:02:15', 1),
            ('2024-05-20 09:02:00', '2024-05-20 09:02:37', 2),
            ('2024-05-20 09:03:00', '2024-05-20 09:02:59', 3),
            ('2024-05-20 09:03:00', '2024-05-20 09:03:21', 4),
            ('2024-05-20 09:03:00', '2024-05-20 09:03:43', 5),
            ('2024-05-20 09:04:00', '2024-05-20 09:04:05', 6)],
           names=['rounded_minute', 'raw_datetime', 'row_number'])

注意事项

  • pandas 1.3.0及以上版本原生支持datetime的round("min")语法,低版本用户可以先升级pandas,或者用pd.to_datetime((dt_level.astype('int64') // 60e9 ) * 60e9)实现等价的分钟舍入逻辑。

内容的提问来源于stack exchange,提问作者Jonny Shanahan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:36:03