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

Pandas如何将不规则嵌套列表转为按日期对齐补0的DataFrame

不规则嵌套列表转日期对齐补0的Pandas DataFrame实现

问题背景

  • 输入嵌套列表固定结构:每个子元素包含两个列表,依次存储日期序列、对应数值序列,示例数据如下:
nl = [
    [['04-05-2021', '05-05-2021', '06-05-2021'],[2240, 3528, 2800]],
    [['03-05-2021', '04-05-2021', '05-05-2021'],[123032, 18312, 123872]]
]
  • 转换规则:
    • 日期作为索引列
    • 不同分组的数值作为独立列
    • 日期无匹配值的位置填充0
  • 预期输出效果:
DATE            1      2
03-05-2021      0     123032
04-05-2021      2240  18312
05-05-2021      3528  123872
06-05-2021      2800  0
  • 原有代码问题:直接对转置后的DataFrame做横向拼接,没有将日期设为索引做对齐,导致日期列和数值列混排,输出不符合要求。

正确实现方案

核心逻辑:先将每个子列表转换为以日期为索引的Series,再做横向拼接,Pandas会自动按索引(日期)对齐,最后补0调整格式即可。
完整可运行代码:

import pandas as pd

nl = [
    [['04-05-2021', '05-05-2021', '06-05-2021'],[2240, 3528, 2800]],
    [['03-05-2021', '04-05-2021', '05-05-2021'],[123032, 18312, 123872]]
]

series_list = []
# 逐组构造日期索引的Series
for date_seq, val_seq in nl:
    series_list.append(pd.Series(val_seq, index=date_seq))

# 横向拼接,自动按日期索引对齐
df = pd.concat(series_list, axis=1)
# 缺失值补0,转整数类型
df = df.fillna(0).astype(int)
# 设置列名、索引名匹配预期格式
df.columns = [1, 2]
df.index.name = 'DATE'

print(df)

逻辑说明

  • 构造Series时显式指定日期为索引,会自动建立日期到数值的映射关系
  • pd.concat横向拼接多组Series时,会自动合并所有出现过的日期作为统一索引,无对应值的位置默认填充NaN
  • 最后通过fillna(0)补全空值,调整列名和索引名即可得到完全符合预期的结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:45:26