如何在DataFrame中复制并转换足球比赛数据?
解决足球比赛DataFrame转换问题
核心思路
把每场比赛拆分为两条记录:一条以主队为Team、客队为Opponent;另一条以客队为Team、主队为Opponent,比赛结果保持不变,最后合并所有记录并按球队名称排序。
代码实现
import pandas as pd # 构造示例原DataFrame(替换成你自己的数据源即可) data = { '日期': ['2017年5月21日周日15:00', '2017年5月18日周四19:45', '2017年5月17日周三19:45', '2017年5月16日周二20:00'], '主队': ['A', 'C', 'E', 'B'], '客队': ['B', 'D', 'A', 'C'], '比赛结果': ['A', 'D', 'E', '平局'] } df = pd.DataFrame(data) # 生成主队视角的记录 home_records = df.copy() home_records.rename(columns={'主队': 'Team', '客队': 'Opponent'}, inplace=True) # 生成客队视角的记录 away_records = df.copy() away_records.rename(columns={'客队': 'Team', '主队': 'Opponent'}, inplace=True) # 合并两个视角的记录并重置索引 final_df = pd.concat([home_records, away_records], ignore_index=True) # 按Team列排序,匹配期望的结果顺序 final_df = final_df.sort_values(by='Team', ignore_index=True) # 查看最终结果 print(final_df)
最终输出结果
| 日期 | Team | Opponent | 比赛结果 |
|---|---|---|---|
| 2017年5月21日周日15:00 | A | B | A |
| 2017年5月17日周三19:45 | A | E | E |
| 2017年5月21日周日15:00 | B | A | A |
| 2017年5月16日周二20:00 | B | C | 平局 |
| 2017年5月16日周二20:00 | C | B | 平局 |
| 2017年5月18日周四19:45 | C | D | D |
| 2017年5月18日周四19:45 | D | C | D |
| 2017年5月17日周三19:45 | E | A | E |
内容的提问来源于stack exchange,提问作者Robsmith
相关产品推荐
相关产品推荐

