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

pandas DataFrame复杂透视:将特殊结构CSV转换为指定格式数据表

实现思路

原数据为按球员分块存储的非标准结构化数据,核心处理逻辑为:先识别出球员名称并给对应统计行填充球员归属,再通过两次长宽表转换得到目标格式。

完整实现代码

import pandas as pd
import numpy as np

# 1. 读取数据并重命名首列
# 若读取时分钟段列名识别为整数,将后续代码中字符串格式的列名替换为整数即可
df = pd.read_csv("你的本地CSV文件路径.csv")
df = df.rename(columns={df.columns[0]: "Stat"})

# 2. 识别球员行并填充球员归属列
# 球员行判定规则:除首列外所有列值均为NaN,且首列本身非空
player_mask = df.drop("Stat", axis=1).isna().all(axis=1) & df["Stat"].notna()
df["Player"] = np.where(player_mask, df["Stat"], np.nan)
# 向前填充,给每个统计行标注所属球员
df["Player"] = df["Player"].ffill()

# 3. 清洗无效行,完成表结构转换
# 过滤掉球员自身行、全空行,仅保留有效统计数据行
df_clean = df[~player_mask & df["Stat"].notna()].copy()

# 第一步宽转长:把分钟段从列名转换为行值
df_melt = df_clean.melt(
    id_vars=["Player", "Stat"],
    value_vars=["5", "10", "15", "20"],
    var_name="MinuteSplits",
    value_name="Value"
)

# 第二步长转宽:把统计项(Total/Walking等)从行值转换为列
df_result = df_melt.pivot(
    index=["Player", "MinuteSplits"],
    columns="Stat",
    values="Value"
).reset_index()

# 调整列顺序为期望结构
df_result = df_result[["Player", "MinuteSplits", "Total", "Walking", "Jogging", "Sprinting"]]

输出验证

运行后df_result即为你需要的目标结构,可直接通过print(df_result)查看结果。


内容的提问来源于stack exchange,提问作者Christian Rønsholt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:57:02