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

如何创建带命名日期主索引与自动递增无命名子索引的DataFrame

你期望的结构属于Pandas的分层索引(MultiIndex)结构,完全可以实现追加同日期行时子索引自动递增,也有其他更简便的方式存储同日期多条记录,具体实现如下:

方法1:分层索引子索引自动递增实现

追加同日期记录时,先查询该日期下已有的最大子序号,新记录的子序号设置为最大序号+1即可,参考代码:

import pandas as pd

# 构造符合要求的初始DataFrame
data = {"A": [0, 1, 0, 1, 0], "B": [0, 1, 0, 0, 1]}
# 第一层索引为日期,第二层为同日期下的自增序号
multi_index = pd.MultiIndex.from_tuples(
    [
        ("2021-11-12", 1), ("2021-11-12", 2),
        ("2021-11-13", 1), ("2021-11-13", 2), ("2021-11-13", 3)
    ],
    names=["date", "seq"]
)
df = pd.DataFrame(data, index=multi_index)

# 追加同日期新记录示例
target_date = "2021-11-12"
new_record = pd.DataFrame([{"A": 1, "B": 2}])

# 计算新记录的子序号
if target_date in df.index.get_level_values("date"):
    current_max_seq = df.loc[target_date].index.max()
    new_seq = current_max_seq + 1
else:
    # 日期不存在时子序号从1开始
    new_seq = 1

# 给新记录设置分层索引后追加
new_record.index = pd.MultiIndex.from_tuples(
    [(target_date, new_seq)],
    names=["date", "seq"]
)
df = pd.concat([df, new_record])

执行后2021-11-12下会新增序号为3的子索引记录,符合自动递增的要求。

其他同日期多记录存储方案

如果不需要严格使用分层索引结构,还有两种更简便的实现方式:

  • 普通单索引+日期列:直接用Pandas默认的自增整数作为行索引,将日期单独存储为一列,需要按日期筛选时直接过滤日期列即可,代码实现更简单,适合绝大多数业务场景。
  • 按日期聚合存储列表:如果同日期的记录不需要单独做行级运算,可以将同日期的A、B列值聚合为列表存储,每行对应唯一日期,需要使用时再展开列表即可,适合存储密度要求高的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:15:06