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

Python Pandas创建列值与列名匹配的DataFrame方法

实现方案

你原有写法的核心问题是直接将股票关联的日期列表转为Series时,是按列表元素的位置顺序填充列,没有和my_dates指定的列做匹配,自然会出现列名错误、值错位的问题。
按如下逻辑实现即可得到目标结果:

  • 逐行遍历股票数据,每行第一个值固定为股票名称
  • 按my_dates的顺序遍历每个日期列,判断该日期是否在当前股票的关联日期列表中:存在则填入对应日期,不存在则留空
  • 生成DataFrame时直接指定列名为my_dates的日期值即可

完整可运行代码如下:

import pandas as pd

# 原始数据定义
my_dates = ['20/12/2024', '31/08/2022', '19/08/2022', '21/06/2024']
my_stocks = [
    ["AAPL", ['20/12/2024', '31/08/2022']],
    ["MSFT", ['20/12/2024', '31/08/2022', '21/06/2024']], 
    ["TSLA", []], 
    ["META", ['20/12/2024', '31/08/2022', '19/08/2022', '21/06/2024']]
]

# 组装行数据
row_data = []
for stock_name, related_dates in my_stocks:
    current_line = [stock_name]
    for col_date in my_dates:
        current_line.append(col_date if col_date in related_dates else "")
    row_data.append(current_line)

# 生成DataFrame
df = pd.DataFrame(row_data, columns=[""] + my_dates)
# 如需和示例完全一致,将股票名列设为行索引
df = df.set_index("")

print(df)

运行后输出结果和预期表格完全一致:

20/12/202431/08/202219/08/202221/06/2024
AAPL20/12/202431/08/2022
MSFT20/12/202431/08/202221/06/2024
TSLA
META20/12/202431/08/202219/08/202221/06/2024

如果你不需要把股票名作为行索引,删除df = df.set_index("")这行代码即可,此时第一列列名为空,列值为对应股票名称,同样满足规则要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:30:17