使用Pandas将每两行网球胜率数据合并为一行生成对阵数据集
Pandas 实现逐行转换比赛胜率数据的方案
前置准备
首先导入Pandas库,读取原始数据。如果你是从csv文件读取,直接替换为pd.read_csv("你的文件路径.csv")即可:
import pandas as pd # 示例:构造原始DataFrame,和你给出的输入格式一致 raw_df = pd.DataFrame( data = [ ["player1", "35%"], ["player2", "65%"], ["player3", "20%"], ["player4", "80%"], ["player5", "90%"], ["player6", "10%"] ], columns = ["player", "probability_of_win"] )
数据转换实现
方案1:分组聚合(逻辑直观,适合需要额外处理分组数据的场景)
核心逻辑是给每两行(同一场比赛)分配相同的分组ID,再按分组聚合出两个选手的信息:
# 按索引每两行分为一组,生成比赛ID raw_df["match_id"] = raw_df.index // 2 # 按比赛ID聚合,分别取出每组的第1、2位选手信息 result_df = raw_df.groupby("match_id").agg( playerA = ("player", "first"), playerB = ("player", "last"), probability_of_win_A = ("probability_of_win", "first"), probability_of_win_B = ("probability_of_win", "last") ).reset_index(drop=True)
方案2:数组重塑(执行效率高,适合大数据量场景)
核心逻辑是把原始二维数组按每两行一组重塑,直接生成目标结构的DataFrame:
# 把原始数据按每两行一组重塑,每行4个元素对应目标表的4列 reshaped_arr = raw_df.values.reshape(-1, 4) # 生成结果DataFrame并调整列顺序 result_df = pd.DataFrame( reshaped_arr, columns = ["playerA", "probability_of_win_A", "playerB", "probability_of_win_B"] )[["playerA", "playerB", "probability_of_win_A", "probability_of_win_B"]]
输出验证
打印result_df即可得到你需要的目标格式:
| playerA | playerB | probability_of_win_A | probability_of_win_B |
|---|---|---|---|
| player1 | player2 | 35% | 65% |
| player3 | player4 | 20% | 80% |
| player5 | player6 | 90% | 10% |
内容的提问来源于stack exchange,提问作者Khaled Koubaa
相关产品推荐
相关产品推荐

