我通常是编码和数据的初学者,所以我能得到的任何帮助都会非常有帮助。
如果我有一个如下所示的数据框,那么每个匹配都是一个元组。
df1 = Team A Player 1.1 Team A Player 2.1 Team A Player 3.1
('Max', 'Hatteberg') ('Hatteberg', 'Tejada') ('Max', 'Rincon')
('Tejada', 'Brown') ('Hatteberg', 'Rincon') ('Hatteberg','Brown')
以此类推。
我有一个交叉表:
df2 = Max Hatteberg Tejada Brown Rincon
Max NaN -1.0 +2.0 -8.0 +5.0
Hatteberg +1.0 NaN +2.5 +3.0 0
Tejada -2.0 -2.5 NaN +5.5 -3.5
Brown +8.0 -3.0 -5.5 NaN +2.8
Rincon -5.0 0 +3.5 2.8 NaN
我希望每次比赛都按原样返回一个值
df1 = matchups 1 matchups 2 matchups 3
+1.0 -2.5 -5.0
-5.5 0 -3.0
我尝试过
df1.applymap(lambda x : df2.lookup([x[0]],[x[1]])[0])
但它回来了
('One or more row labels was not found', 'occurred at index Team A Player 1.1')
我在同时引用两个数据帧和返回值时遇到问题。有人可以帮我吗?预先感谢
答案 0 :(得分:0)
一种实用的解决方案是使用at
和一个简单的for循环
df3 = pd.DataFrame()
for col in df1.columns:
df3[col] = df1[col].apply(lambda x: df2.at[x[0], x[1]])
col1 col2 col3
0 -1.0 2.5 5.0
1 5.5 0.0 3.0
答案 1 :(得分:0)
更像您在df1元组中有一些值,是指df2中的None值
您可以在reindex
apply
之前使用lookup
name=set(list(itertools.chain(*list(itertools.chain(*df1.values.tolist())))))
df2=df2.reindex(name).reindex(name,axis=1)
df1.applymap(lambda x : df2.lookup([x[0]],[x[1]])[0])