Python 将dataframe的两列与新dataframe列进行比较

Python 将dataframe的两列与新dataframe列进行比较,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我有两个数据帧,看起来像 team points 0 1 2.5 1 2 3.2 2 5 5.8 3 3 2.8 4 4 1.9 以及: 预期输出应为我提供一个新的列,其中包含获胜者(更多分数): 以下是一种使用和的方法: 或者更好的替代礼貌@user3483203 s=df2.stack().map(df1.set_index('team')['points']).unstack().idxmax(1)

我有两个数据帧,看起来像

   team  points
0     1     2.5
1     2     3.2
2     5     5.8
3     3     2.8
4     4     1.9
以及:

预期输出应为我提供一个新的列,其中包含获胜者(更多分数):

以下是一种使用和的方法:

或者更好的替代礼貌@user3483203

s=df2.stack().map(df1.set_index('team')['points']).unstack().idxmax(1)
#s.tolist() gives ['team2', 'team1', 'team1']
df2['winner']=df2.lookup(s.index,s)
print(df2)


试图避免使用
applymap
并使用
lookup
+
重塑

x = df.set_index('team').lookup(df2.values.ravel('F'), ["points"]*df2.size)
                        .reshape(df2.shape, order='F')
                        .argmax(1)

df2['winner'] = df2.lookup(df2.index, df2.columns[x])


仅使用的替代解决方案,以及:


我的“简单”解决方案:

df3= df2.replace(df1.set_index("team").points.to_dict()) 
df2["winner"]= np.where(df3.team1>=df3.team2,df2.team1,df2.team2)

欢迎来到SO。人们可以在这里帮助您调试代码,而不仅仅是为您编写代码。请您阅读并创建一个,其中包含您所做的努力和代码中出现的错误,好吗?从这个问题来看,这里使用的规则非常不清楚。谢谢@harvpan提供的信息。我对这一点还不熟悉。我会确保下一次我会把图片弄清楚。替代
applymap
的另一个方法是
df2.stack().map(df1.set_index('team')['points']).unstack().idxmax(1)
,这在大输入时应该会快得多。仍然怀疑它是否能击败掉掉到
numpy
@user3483203的方法同意,但会更新您的建议:)谢谢,谢谢您的帮助:)
s=df2.stack().map(df1.set_index('team')['points']).unstack().idxmax(1)
#s.tolist() gives ['team2', 'team1', 'team1']
df2['winner']=df2.lookup(s.index,s)
print(df2)
   team1  team2  winner
0      1      5       5
1      2      4       2
2      3      1       3
x = df.set_index('team').lookup(df2.values.ravel('F'), ["points"]*df2.size)
                        .reshape(df2.shape, order='F')
                        .argmax(1)

df2['winner'] = df2.lookup(df2.index, df2.columns[x])
   team1  team2  winner
0      1      5       5
1      2      4       2
2      3      1       3
df_match['winner']=( df_match.stack()
                             .map(df.set_index('team')['points'])
                             .unstack()
                             .max(axis=1)
                             .map(df.set_index('points')['team']) )
print(df_match)

   team1  team2  winner
0      1      5       5
1      2      4       2
2      3      1       3
df3= df2.replace(df1.set_index("team").points.to_dict()) 
df2["winner"]= np.where(df3.team1>=df3.team2,df2.team1,df2.team2)