所以我有 5 个来自 FIFA 13-17 的评分前 80 名球员的数据帧,每个数据帧都包含球员姓名、评分和俱乐部。我的最终目标是将所有这些数据集合并在一起,这样我就可以每年对每个玩家进行评分,如果他们没有做到,则为空值。显然,有些球员并不是每年都进入前 80 名,即:退休。
这是三个数据帧的片段。
FIFA18Name Overall Club0 Cristiano Ronaldo 94 Real Madrid CF1 L. Messi 93 FC Barcelona2 Neymar 92 FC Barcelona3 L. Suárez 92 FC Barcelona4 M. Neuer 92 FC Bayern Munich5 De Gea 90 Manchester United6 R. Lewandowski 90 FC Bayern Munich7 J. Boateng 90 FC Bayern Munich8 G. Bale 90 Real Madrid CF9 Z. Ibrahimović 90 Manchester United10 T. Courtois 89 Chelsea
FIFA 13Name Overall Club0 L. Messi 94 FC Barcelona1 Cristiano Ronaldo 92 Real Madrid CF2 F. Ribéry 90 FC Bayern Munich3 Xavi 90 FC Barcelona4 Iniesta 90 FC Barcelona5 N. Vidić 89 Manchester United6 W. Rooney 89 Manchester United7 Casillas 89 Real Madrid CF8 David Silva 88 Manchester City9 Falcao 88 Atlético Madrid10 Z. Ibrahimović 88 Paris Saint-Germain
发生这种情况的一个例子可能是已经退休的 N. Vidić。
我的目标表是这个Name FIFA17 FIA13 Club0 Cristiano Ronaldo 94 92 Real Madrid CF1 L. Messi 93 94 FC Barcelona2 Neymar 92 83 FC Barcelona3 L. Suárez 92 86 FC Barcelona4 M. Neuer 92 87 FC Bayern Munich5 De Gea 90 82 Manchester United6 R. Lewandowski 90 80 FC Bayern Munich7 J. Boateng 90 84 FC Bayern Munich8 G. Bale 90 86 Real Madrid CF9 Z. Ibrahimović 90 88 Manchester United10 T. Courtois 89 83 Chelsea11 F. Ribéry 86 90 FC Bayern Munich12 Xavi 0 90 FC Barcelona13 Iniesta 88 90 FC Barcelona14 N. Vidić 0 89 Manchester United15 W. Rooney 0 89 Manchester United16 Casillas 0 89 Real Madrid CF17 David Silva 87 88 Manchester City18 Falcao 0 88 Atlético Madrid
我是 python 和 pandas 的新手,但我尝试过使用 join 和 merge 但它似乎总是使用每个表的索引而不是唯一的名称。
任何帮助将不胜感激!
最佳答案
这是通过 pd.concat
和 pivot_table
的一种方式。它假设您能够将数据帧放入字典中,该字典可以是任意长度。
该解决方案还涉及多个俱乐部,仅保留最新的俱乐部。
dfs = {13: df13, 18: df18}
df = pd.concat([dfs[k].assign(Year=k) for k in dfs])
club_map = df.sort_values('Year', ascending=False)\
.drop_duplicates('Name')\
.set_index('Name')['Club']
df['Club'] = df['Name'].map(club_map)
res = df.pivot_table(index=['Name', 'Club'], columns='Year',
values='Overall', aggfunc=np.sum, fill_value=0)\
.reset_index().rename_axis(None, axis='columns')
结果
Name Club 13 18
0 Casillas Real Madrid CF 89 0
1 Cristiano Ronaldo Real Madrid CF 92 94
2 David Silva Manchester City 88 0
3 De Gea Manchester United 0 90
4 F. Ribéry FC Bayern Munich 90 0
5 Falcao Atlético Madrid 88 0
6 G. Bale Real Madrid CF 0 90
7 Iniesta FC Barcelona 90 0
8 J. Boateng FC Bayern Munich 0 90
9 L. Messi FC Barcelona 94 93
10 L. Suárez FC Barcelona 0 92
11 M. Neuer FC Bayern Munich 0 92
12 N. Vidić Manchester United 89 0
13 Neymar FC Barcelona 0 92
14 R. Lewandowski FC Bayern Munich 0 90
15 T. Courtois Chelsea 0 89
16 W. Rooney Manchester United 89 0
17 Xavi FC Barcelona 90 0
18 Z. Ibrahimović Manchester United 88 90
关于python - 合并多个数据帧,其中某些行不相同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49319227/