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/2024 | 31/08/2022 | 19/08/2022 | 21/06/2024 | |
|---|---|---|---|---|
| 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 |
如果你不需要把股票名作为行索引,删除
df = df.set_index("")这行代码即可,此时第一列列名为空,列值为对应股票名称,同样满足规则要求。
内容的提问来源于stack exchange,提问作者mika579
相关产品推荐
相关产品推荐

