pandas - Pandas - 将值从一个数据帧映射到另一个数据帧
问题描述
我有这个df:
df_selected = pd.DataFrame({'player':['Keno', 'Filipe Luís', 'Thiago Galhardo'],
'selected': [2868.755, 776.147, 2696.853],
'ranking':[1,3,2]})
打印:
player selected ranking
0 Keno 2868.755 1
1 Filipe Luís 776.147 3
2 Thiago Galhardo 2696.853 2
和这个:
df_player = pd.DataFrame({'name':['Keno', 'Filipe Luís', 'Thiago Galhardo', 'SomePlayer'],
'team': ['Atlético-MG', 'Flamengo', 'Internacional', 'SomeTeam']})
打印:
player team
0 Keno Atlético-MG
1 Filipe Luís Flamengo
2 Thiago Galhardo Internacional
3 Fulano TimeQualquer
现在我想检查给定的玩家df_player
是否在df_selected
,如果是,则获取其排名位置并将其添加到df_player
. 如果玩家不在df_selected
,则在其排名中添加 0 值。我试过了:
for ind, player in df_player.iterrows():
for index, selected in df_selected.iterrows():
if player.player == selected.player:
df_player['ranking'].iloc[ind] = selected.ranking
else:
df_player['ranking'].iloc[ind] = 0
但它不起作用,必须有一种更简单的方法来映射这些项目。
期望的结果player_df
:
player team ranking
0 Keno Atlético-MG 1
1 Filipe Luís Flamengo 3
2 Thiago Galhardo Internacional 2
3 SomePlayer SomeTeam 0
我错过了什么?
解决方案
这是我的做法。
merge_dict = dict(zip(df_selected['player'], df_selected['ranking']))
df_player['ranking'] = df_player['player'].map(merge_dict)
我认为这可以解决您的问题,并且会比您的 for 循环快得多。
推荐阅读
- android - api 监听器太多。有什么办法可以整齐的组织起来吗?
- node.js - 在 git bash 中使用 utf-8 的 npx 包
- google-cloud-platform - GCP 通知通道
- node.js - 无法从 React-Node 中的上传文件夹访问图像
- javascript - 在 React 应用程序中从 s3 presigned url timeout 捕获 403 错误
- ghostscript - 我可以让 GhostScript 使用超过 2 GB 的内存吗?
- macos - macos openvpn on demand NEAgentErrorDoamin
- javascript - 反向转换不适用于导航
- python - Selenium 的问题,尤其是优化问题
- spring - 导入org.springframework 无法解决