将 1 Dataframe 乘以根据其索引值选择的另一个 Dataframe 中的一行
Multiply 1 Dataframe by a row in another one selected based on its index value
我正在为这个而烦恼。
我有 2 个数据帧:
df1 保存球员的数据及其位置(区域)(前锋、中场或后卫)和他们的一些
游戏数据。
df1 = pd.DataFrame({'Zone': ['DEF', 'MID', 'FWD'], 'Tackles': [5, 10, 5], 'Goals': [0, 1, 1], 'Shots': [10, 5, 2]} , index=(['Player A', 'Player B', 'Player C']))
Zone Tackles Goals Shots
Player A DEF 5 0 10
Player B MID 10 1 5
Player C FWD 5 1 2
df2 包含我要应用来计算每个玩家的性能指标的权重。权重取决于球员的位置
df2 = pd.DataFrame({'Tackles': [1, 2, 4], 'Goals': [10, 5, 2], 'Shots': [3, 3, 1]}, index=(['FWD', 'MID', 'DEF']))
Tackles Goals Shots
FWD 1 10 3
MID 2 5 3
DEF 4 2 1
我想将 df1 中的每一行乘以 df2 中相应的行
这就是我想要得到的:
Zone Tackles Goals Shots Index
Player A DEF 5 0 10 30.0 (5*4 + 0*2 + 10*1)
Player B MID 10 1 5 40.0 (10*2 + 1*5 +5*3)
Player C FWD 5 1 2 21.0 (5*1 + 1*10 +2*3)
我试过的是这样的:
df1['Index'] = (df1 * df2.loc[df1['Zone']]).sum(axis=1)
但是没用...
非常感谢您的帮助
附加临时 Zone
作为 df1
的索引:
df1['Index'] = df1.set_index('Zone', append=True).mul(df2, level=1).sum(axis=1).values
print(df1)
# Output
Zone Tackles Goals Shots Index
Player A DEF 5 0 10 30
Player B MID 10 1 5 40
Player C FWD 5 1 2 21
我正在为这个而烦恼。
我有 2 个数据帧:
df1 保存球员的数据及其位置(区域)(前锋、中场或后卫)和他们的一些
游戏数据。
df1 = pd.DataFrame({'Zone': ['DEF', 'MID', 'FWD'], 'Tackles': [5, 10, 5], 'Goals': [0, 1, 1], 'Shots': [10, 5, 2]} , index=(['Player A', 'Player B', 'Player C']))
Zone Tackles Goals Shots
Player A DEF 5 0 10
Player B MID 10 1 5
Player C FWD 5 1 2
df2 包含我要应用来计算每个玩家的性能指标的权重。权重取决于球员的位置
df2 = pd.DataFrame({'Tackles': [1, 2, 4], 'Goals': [10, 5, 2], 'Shots': [3, 3, 1]}, index=(['FWD', 'MID', 'DEF']))
Tackles Goals Shots
FWD 1 10 3
MID 2 5 3
DEF 4 2 1
我想将 df1 中的每一行乘以 df2 中相应的行
这就是我想要得到的:
Zone Tackles Goals Shots Index
Player A DEF 5 0 10 30.0 (5*4 + 0*2 + 10*1)
Player B MID 10 1 5 40.0 (10*2 + 1*5 +5*3)
Player C FWD 5 1 2 21.0 (5*1 + 1*10 +2*3)
我试过的是这样的:
df1['Index'] = (df1 * df2.loc[df1['Zone']]).sum(axis=1)
但是没用...
非常感谢您的帮助
附加临时 Zone
作为 df1
的索引:
df1['Index'] = df1.set_index('Zone', append=True).mul(df2, level=1).sum(axis=1).values
print(df1)
# Output
Zone Tackles Goals Shots Index
Player A DEF 5 0 10 30
Player B MID 10 1 5 40
Player C FWD 5 1 2 21