我有3个数据框:
df1
具有匹配历史记录(按日期组织)df2
包含玩家统计信息(按玩家名称组织)df3
每场比赛(df2
)的球员状态(df1
)之间的差异[进行中] 我想做类似的事情:
for idx, W_nm, L_nm in df1[['index','winner_name','loser_name']].values:
df3.loc[idx] = df2.loc[W_nm] - df2.loc[L_nm]
#... edit this row further
失败的原因是:
'idx'
未引用df1
的索引df3
没有定义的列有没有办法引用第一行的索引?
我读到的iterrows()
比.loc[]
慢7倍,并且我有很多数据要处理
有没有比这更清洁的东西了?
for idx in df1.index:
W_nm = df1.loc[idx,'winner_name']
L_nm = df1.loc[idx,'loser_name']
df3.loc[idx] = df2.loc[W_nm] - df2.loc[L_nm]
#... edit this row further
哪个不解决“未定义的列”,但给我我的句柄。
所以我期望这样的事情:
df1
[ 'Loser' 'Winner' 'Score'
0 Harry Hermione 3-7 ...
1 Harry Ron 0-2 ...
2 Ron Voldemort 7-89 ... ]
df2
[ 'Spells' 'Allies'
Harry 23 84 ...
Hermione 94 68 ...
Ron 14 63 ...
Voldemort 97 92 ... ]
then
df3
[ 'Spells' 'Allies'
0 -71 16 ...
1 9 21 ...
2 -83 -29 ... ]
答案 0 :(得分:0)
您需要的是join
:
loser = df1.join(df2, on='Loser').loc[:,['Spells', 'Allies']]
winner = df1.join(df2, on='Winner').loc[:,['Spells', 'Allies']]
df3 = winner - loser
给出您的示例数据:
Spells Allies
0 71 -16
1 -9 -21
2 83 29