python - 基于匹配列 pandas 组合行
问题描述
我有一个 csv 文件,其中包含每支球队整个赛季的比赛和统计数据。我想将客队与那周面对的主队移动到同一排。
当前数据框:
Week Team H/a Opp Pf Pa Pyards
1 A C 3 14 100
1 B D 7 21 200
1 C @ A 14 3 300
1 D @ B 21 7 400
所需的数据框:
Week HomeTeam H-score H-Pyards AwayTeam A-score A-Pyards
1 A 3 100 C 14 300
1 B 7 200 D 21 400
但是我会为每支球队和多周获得更多的统计数据。
解决方案
我相信您正在寻找的操作是在self-join
之后进行的一些操作。正如 Quang Hoang 所说,在不同的列中合并相同的数据框/表称为自连接。我相信这是一种获得预期输出的方法:
df = pd.DataFrame({'Week':[1,1,1,1],
'Team':['A','B','C','D'],
'H/a':[np.nan,np.nan,'@','@'],
'Opp':['C','D','A','B'],
'Pf':[3,7,14,21],
'Pa':[14,21,3,7],
'Pyards':[100,200,300,400]})
print(df)
new_df = df.merge(df,how='inner',left_on=['Week','Team'],right_on=['Week','Opp'])
new_df = new_df[new_df['H/a_x'] != '@']
replacers = {'Team_x':'HomeTeam','Pf_x':'Pf','Pyards_x':'H-Pyards','Opp_x':'AwayTeam','Pa_x':'A-score','Pyards_y':'A-Pyards'}
new_df = new_df[['Week']+[x for x in replacers.keys()]]
new_df = new_df.rename(columns=replacers)
print(new_df)
输出:
Week HomeTeam Pf H-Pyards AwayTeam A-score A-Pyards
0 1 A 3 100 C 14 300
1 1 B 7 200 D 21 400
推荐阅读
- autodesk-forge - DWG 文件字体显示不正确
- typescript - 如何让量角器测试等待多个元素而不依赖 SELENIUM_PROMISE_MANAGER 进行同步?
- html - BeautifulSoup4 标签内容未显示
- android - 在 Android (API 30) 中以编程方式连接到特定的 wifi 网络
- javascript - 如何使用按钮切换图像可见性?
- java - Heroku - 具有本地依赖项的 Maven 应用程序在本地运行完美,但未部署
- python - shapeshifter-dispatcher 给出传输错误
- html - CSS 垂直侧边栏样式
- php - opentok php sdk 未定义变量streamId
- html - UNO 中的 HTMLMediaPlayer 总是返回 BLANK 或未定义的 ontimeupdate 事件