【发布时间】:2021-10-14 22:16:31
【问题描述】:
我是 python 和 pandas 的新手,正在尝试“边做边学”。
我目前正在使用两个足球/足球(取决于您来自哪里!)数据框:
- player_table 有几列,其中包括“player_name”和“player_id”
player_id player_name
0 223 Lionel Messi
1 157 Cristiano Ronaldo
2 962 Neymar
- match_table 也有几列,其中包括 'home_player_1'、'..._2'、'..._3' 等,以及对应的 'away_player_1'、'...2'、'。 .._3' 等等。这些列的内容是 player_id,这样您就可以通过他们各自的唯一 ID 来判断哪些 22 (2x11) 名球员参加了一场给定的比赛。
我将在这里发布一个 2 vs. 2 的示例,因为它同样有效:
match_id home_player_1 home_player_2 away_player_1 away_player_2
0 321 223 852 729 853
1 322 223 858 157 159
2 323 680 742 223 412
我现在想做的是向 player_table 添加一个新列,它给出出现次数 - player_table['appearances'] 通过计算每个 player_id 在水平绑定的数据框 match_table 部分中提及的次数按(主队球员 1,客队球员 2)和垂直按(第一场比赛,最后一场比赛)
想要的结果:
player_id player_name appearances
0 223 Lionel Messi 3
1 157 Cristiano Ronaldo 1
2 962 Neymar 0
来自其他编程语言,我认为我的标准解决方案是嵌套 for 循环,但我知道这在 python 中是不受欢迎的......
我尝试了几种解决方案,但都没有真正奏效,这似乎至少给出了“home_player_1”的出现次数
player_table['appearances'] = player_table['player_id'].map(match_table['home_player_1'].value_counts())
有没有办法扩展 map 函数以在数据框中包含几列?或者我是否必须将 22 列堆叠在一个新的数据框中,然后映射?还是 map 不是合适的功能?
非常感谢您的支持,谢谢! 菲利普
编辑:根据要求添加特定输入和所需输出
【问题讨论】:
-
表格是什么样子的,预期的输出是什么?这是一个很好的开始参考:stackoverflow.com/questions/20109391/…
标签: python-3.x pandas dataframe