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

如何将横向存储的英超联赛数据转换为纵向结构化DataFrame?

解决方法

你的核心问题是把宽表(每行一个赛季,列是所有球队的各项数据)转成长表(每行对应一个赛季+一支球队,列是各项赛事指标),转置没用是因为仅互换行列无法拆分球队和指标的维度。以下是具体操作步骤:

假设你的DataFrame初始结构

假设你的df是这样的(每行对应一个赛季,列采用球队_指标命名格式):

阿森纳_积分阿森纳_胜场...曼城_积分曼城_胜场...
2021/228826...9329...
2022/238926...8928...
2023/248425...8928...

步骤1:将赛季转为独立列

先把行索引中的赛季转为普通数据列:

import pandas as pd

# 假设爬取的数据已存入DataFrame df
df = df.reset_index().rename(columns={'index': '赛季'})

步骤2:宽表转长表

用melt方法把所有球队指标列拆分为球队_指标和数据两列:

melted_df = df.melt(id_vars='赛季', var_name='球队_指标', value_name='数据')

步骤3:拆分球队与指标

将球队_指标列拆分为球队和指标两个独立列:

# 这里假设列名用下划线分隔,若使用空格等其他分隔符,替换成对应字符即可
melted_df[['球队', '指标']] = melted_df['球队_指标'].str.split('_', expand=True)

步骤4:重塑为纵向积分榜格式

用pivot_table把指标转为列,得到和官方一致的纵向结构:

final_df = melted_df.pivot_table(
    index=['赛季', '球队'],
    columns='指标',
    values='数据',
    aggfunc='first'
).reset_index()

# 可选:按英超官方指标顺序调整列的排列
desired_cols = ['赛季', '球队', '积分', '胜场', '平场', '负场', '进球', '失球', '净胜球', '排名']
final_df = final_df[desired_cols]

特殊情况处理:列名无球队/标识

如果你的列名没有明确的球队_指标格式(比如仅为col0, col1...),先手动给列名打上球队和指标标签:

# 定义20支英超球队列表(需和爬取的列顺序严格对应)
teams = ['阿森纳', '曼城', '利物浦', '切尔西', '热刺', '曼联', '纽卡斯尔', '布莱顿', '阿斯顿维拉', '布伦特福德',
         '富勒姆', '水晶宫', '埃弗顿', '伯恩茅斯', '狼队', '西汉姆联', '诺丁汉森林', '南安普顿', '莱斯特城', '利兹联']
# 定义指标列表(每个球队对应的指标顺序)
stats = ['积分', '胜场', '平场', '负场', '进球', '失球', '净胜球', '排名']

# 生成新的列名
new_columns = [f'{team}_{stat}' for team in teams for stat in stats]
df.columns = new_columns

# 之后再执行上述步骤1-4即可

处理完成后,final_df就是每行对应一个赛季的一支球队、各项指标为列的纵向格式,完全匹配英超官方积分榜的结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 14:30:23