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

如何为多联赛字典生成带表头与子表头的Pandas DataFrame?

实现带有多级表头的体育赛事数据DataFrame

需求说明

我有一个包含约15个动态变化联赛的字典,数据示例如下:

sports_data = {
    'NFL': [
        {'Name': 'Taysom Hill', 'Line': '0.5', 'Prop': 'Pass Yards'},
        {'Name': 'Derek Carr', 'Line': '238.5', 'Prop': 'Pass Yards'},
        {'Name': 'Jared Goff', 'Line': '251.5', 'Prop': 'Pass Yards'}
    ],
    'MLB': [
        {'Name': 'Brandon Pfaadt', 'Line': '4.0','Prop': 'Pitcher Strikeouts'},
        {'Name': 'Ranger Suárez', 'Line': '3.0', 'Prop': 'Pitcher Strikeouts'},
        {'Name': 'Trea Turner', 'Line': '1.5', 'Prop': 'Total Bases'}
    ]
}

需要将其转换为带有**一级表头(联赛名)和二级子表头(Name、Line、Prop)**的DataFrame,预期格式如下:

**NFL**                                  **MLB** 
    Name       Line       Prop           Name           Line       Prop
1 Taysom Hill   0.5     Pass Yards  Brandon Pfaadt      4.0  Pitcher Strikeouts
2 Derek Carr  238.5     Pass Yards   Ranger Suárez      3.0  Pitcher Strikeouts
3 Jared Goff  251.5     Pass Yards     Trea Turner      1.5      Total Bases

作为Python新手,尝试多种代码后未得到目标格式,部分代码仅输出一行结果,请问该需求是否可实现?如何解决?

解决方案

该需求完全可以实现,利用pandas的**多级列索引(MultiIndex)**即可完成,具体步骤如下:

1. 导入pandas库

import pandas as pd

2. 遍历字典生成带多级列的子DataFrame

遍历每个联赛数据,将列表转为DataFrame,并为其设置多级列:一级列名为联赛名,二级列名为原数据的键(Name、Line、Prop)。

3. 横向拼接所有子DataFrame

使用pd.concat()将所有子DataFrame按列方向拼接,形成最终的多级表头DataFrame。

4. 调整行索引(可选)

将行索引从0开始改为从1开始,匹配示例格式。

完整代码

import pandas as pd

sports_data = {
    'NFL': [
        {'Name': 'Taysom Hill', 'Line': '0.5', 'Prop': 'Pass Yards'},
        {'Name': 'Derek Carr', 'Line': '238.5', 'Prop': 'Pass Yards'},
        {'Name': 'Jared Goff', 'Line': '251.5', 'Prop': 'Pass Yards'}
    ],
    'MLB': [
        {'Name': 'Brandon Pfaadt', 'Line': '4.0','Prop': 'Pitcher Strikeouts'},
        {'Name': 'Ranger Suárez', 'Line': '3.0', 'Prop': 'Pitcher Strikeouts'},
        {'Name': 'Trea Turner', 'Line': '1.5', 'Prop': 'Total Bases'}
    ]
}

# 生成子DataFrame列表
df_list = []
for league, data in sports_data.items():
    df = pd.DataFrame(data)
    # 设置多级列:(联赛名, 子表头)
    df.columns = pd.MultiIndex.from_tuples([(league, col) for col in df.columns])
    df_list.append(df)

# 横向拼接所有子DataFrame
final_df = pd.concat(df_list, axis=1)

# 调整行索引从1开始
final_df.index = final_df.index + 1

print(final_df)

代码说明

  • pd.MultiIndex.from_tuples():将联赛名和子表头组合成元组,生成多级列索引,这是实现双层表头的核心。
  • pd.concat(df_list, axis=1):按列方向拼接多个DataFrame,保证不同联赛的子表头横向排列。
  • 行索引调整:通过index + 1让行号从1开始,和示例格式一致。

输出效果

运行代码后,输出的DataFrame会和预期格式完全一致,且支持动态扩展任意数量的联赛。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:39:51