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

使用Pandas处理嵌套JSON生成骑手积分排名所需的正确表格格式

问题原因

你直接将读取到的完整嵌套字典传入pandas生成DataFrame时,pandas会把最外层的场次编号识别为列名,内层的Rider、Pts识别为行索引,对应值整组存入单元格,才会出现布局错位的问题。

正确实现代码

import json
import pandas as pd

# 读取json文件
with open("data.json", "r", encoding="utf-8") as f:
    race_data = json.load(f)

# 逐场生成表格
for race_id, race_info in race_data.items():
    # 调整分数字段名为 Pts+场次号
    formatted_race = {
        "Rider": race_info["Rider"],
        f"Pts{race_id}": race_info["Pts"]
    }
    # 生成单场表格,按得分降序排序取前3
    single_df = pd.DataFrame(formatted_race).sort_values(
        by=f"Pts{race_id}", ascending=False
    ).head(3).reset_index(drop=True)
    # 输出单场表格
    print(single_df)

# 如需生成最近3场总排名,可使用以下逻辑(假设场次号越大赛事越新)
if len(race_data) >= 3:
    # 排序取最近3场的场次号
    latest_race_ids = sorted(race_data.keys(), key=int)[-3:]
    total_df = None
    for race_id in latest_race_ids:
        temp_df = pd.DataFrame({
            "Rider": race_data[race_id]["Rider"],
            f"Pts{race_id}": race_data[race_id]["Pts"]
        })
        total_df = temp_df if total_df is None else total_df.merge(temp_df, on="Rider", how="outer")
    # 计算总得分并排序
    total_df["总得分"] = total_df[[col for col in total_df.columns if col.startswith("Pts")]].sum(axis=1)
    final_rank = total_df.sort_values(by="总得分", ascending=False).reset_index(drop=True)
    print("最近3场总排名:")
    print(final_rank)

效果验证

针对你给出的示例data.json数据,运行上述代码输出的单场表格如下:

RiderPts1
0Fabien850
1Rick680
2Oleg575

完全符合需求。

内容的提问来源于stack exchange,提问作者Barry Marples

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:45:03