使用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数据,运行上述代码输出的单场表格如下:
| Rider | Pts1 | |
|---|---|---|
| 0 | Fabien | 850 |
| 1 | Rick | 680 |
| 2 | Oleg | 575 |
完全符合需求。
内容的提问来源于stack exchange,提问作者Barry Marples
相关产品推荐
相关产品推荐

