如何从嵌套列表生成以股票编号为列、日期为行的DataFrame
通用实现方案:将嵌套列表转为指定结构的DataFrame
刚好做过类似的需求,用Pandas的透视表功能就能完美解决这个通用转换问题,完全不需要手动指定股票编号或者日期,自动适配任意规模的嵌套列表。
核心思路
先把嵌套列表转换成基础的三列DataFrame,再通过**透视(pivot)**操作重塑成你需要的“日期为行、股票编号为列”的结构,缺失数据会自动填充NaN,完全符合你的要求。
完整代码示例
import pandas as pd # 你的原始嵌套列表(这里用你给出的示例,任意规模都适用) A = [[120, 'Date1', 1.03], [120, 'Date2', 1.04], [120, 'Date3', 1.02], [240, 'Date1', 1.06], [240,'Date2', 0.98], [240, 'Date3', 1.04], [381, 'Date2', 1.03], [381, 'Date3', 0.85]] # 1. 将嵌套列表转为基础DataFrame,定义临时列名 raw_df = pd.DataFrame(A, columns=['股票编号', '日期', '数值']) # 2. 执行透视操作,自动生成目标结构 target_df = raw_df.pivot(index='日期', columns='股票编号', values='数值') # 查看结果 print(target_df)
运行后输出的结果完全匹配你想要的结构:
股票编号 120 240 381 日期 Date1 1.03 1.06 NaN Date2 1.04 0.98 1.03 Date3 1.02 1.04 0.85
处理特殊情况:重复数据
如果你的嵌套列表中存在同一股票+同一日期对应多个数值的情况,pivot会抛出错误。这时候可以用pivot_table替代,通过aggfunc参数指定重复值的处理逻辑(比如取均值、第一个值、最大值等):
# 处理重复数据,这里以取均值为例,可替换为'first'/'max'/'min'等 target_df = raw_df.pivot_table( index='日期', columns='股票编号', values='数值', aggfunc='mean' # 自定义重复值处理规则 )
为什么这是通用方案?
- 不管嵌套列表里有多少个股票编号、多少个日期,代码都会自动识别所有唯一值作为列和行
- 缺失的(股票+日期)组合会自动填充
NaN,不需要手动处理 - 完全不需要硬编码任何股票编号或日期,适配任意规模的输入
内容的提问来源于stack exchange,提问作者Hertzeh
相关产品推荐
相关产品推荐

