我在看足球运动员在五年内的发展。
我有两个数据处理程序(DFs),一个包含来自国际足联17的所有20岁的前锋,另一个包含国际足联22的所有25岁的前锋。我想要创建第三个DF,它包含每个玩家的属性更改。有大约30列代表每个属性,如攻防,投篮,传球等。所以我希望新的DF包含+3的攻防,+2的投篮,+6的传球等等。
我能想到的解决这个问题的最好方法是合并两个DFs,然后对每个列应用一个函数,给出x值和y值之间的差额,分别表示FIFA 17和FIFA 22的数据。
任何小费都很感激。谢谢。
发布于 2022-06-30 07:36:04
如前所述,使用数据格式的差异。我怀疑它们不是ALL NaN值,因为只有在同样的球员不在17和22国际足联的情况下,你才能得到这样的值。
当我这么做的时候,17岁和22岁的球员只有533人(在国际足联17岁时只有20岁,在22岁时只有25岁)。
下面是一个例子:
将熊猫作为pd导入
fifa17 = pd.read_csv('D:/test/fifa/players_17.csv')
fifa17 = fifa17[fifa17['age'] == 20]
fifa17 = fifa17.set_index('sofifa_id')
fifa22 = pd.read_csv('D:/test/fifa/players_22.csv')
fifa22 = fifa22[fifa22['age'] == 25]
fifa22 = fifa22.set_index('sofifa_id')
compareCols = ['pace', 'shooting', 'passing', 'dribbling', 'defending',
'physic', 'attacking_crossing', 'attacking_finishing',
'attacking_heading_accuracy', 'attacking_short_passing',
'attacking_volleys', 'skill_dribbling', 'skill_curve',
'skill_fk_accuracy', 'skill_long_passing',
'skill_ball_control', 'movement_acceleration',
'movement_sprint_speed', 'movement_agility',
'movement_reactions', 'movement_balance', 'power_shot_power',
'power_jumping', 'power_stamina', 'power_strength',
'power_long_shots', 'mentality_aggression',
'mentality_interceptions', 'mentality_positioning',
'mentality_vision', 'mentality_penalties',
'mentality_composure', 'defending_marking_awareness',
'defending_standing_tackle', 'defending_sliding_tackle']
df = fifa22[compareCols] - fifa17[compareCols]
df = df.dropna(axis=0)
df = pd.merge(df,fifa22[['short_name']], how = 'left', left_index=True, right_index=True)输出:
print(df)
pace shooting ... defending_sliding_tackle short_name
sofifa_id ...
205291 -1.0 0.0 ... 3.0 H. Stengel
205988 -7.0 3.0 ... -1.0 L. Shaw
206086 0.0 8.0 ... 5.0 H. Toffolo
206113 -2.0 21.0 ... -2.0 S. Gnabry
206463 -3.0 8.0 ... 3.0 J. Dudziak
... ... ... ... ...
236311 -2.0 -1.0 ... 18.0 M. Rog
236393 2.0 5.0 ... 0.0 Marc Cardona
236415 3.0 1.0 ... 9.0 R. Alfani
236441 10.0 31.0 ... 18.0 F. Bustos
236458 1.0 0.0 ... 5.0 A. Poungouras
[533 rows x 36 columns]发布于 2022-06-29 14:56:43
您可以考虑下面的简单示例来减去pandas.DataFrame
import pandas as pd
df1 = pd.DataFrame({'X':[1,2],'Y':[3,4]})
df2 = pd.DataFrame({'X':[10,20],'Y':[30,40]})
dfdiff = df2 - df1
print(dfdiff)给予输出
X Y
0 9 27
1 18 36发布于 2022-06-29 15:53:57
我已经找到了一个解决方案,但它非常繁琐,因为它需要为每个属性编写一行代码。
我只是为每个属性更改分配一个新列。例如,对于传递,代码是:
mergedDF = mergedDF.assign(PassingChange = mergedDF.Passing_x - mergedDF.Passing_y)https://stackoverflow.com/questions/72803474
复制相似问题