Python 从第二个数据帧查找值

Python 从第二个数据帧查找值,python,pandas,dataframe,lookup,Python,Pandas,Dataframe,Lookup,我有两个数据帧要合并。第一种情况如下: Date HomeTeam AwayTeam 0 06/01/14 Real Madrid Celta Vigo 1 06/01/14 Celta Vigo Valencia 第二个是这样的: EVENT_ID HomeTeam AwayTeam SELECTION ODDS 0 112324699 Real Madrid Celta Vi

我有两个数据帧要合并。第一种情况如下:

    Date        HomeTeam      AwayTeam
0   06/01/14    Real Madrid   Celta Vigo
1   06/01/14    Celta Vigo    Valencia
第二个是这样的:

    EVENT_ID    HomeTeam        AwayTeam    SELECTION   ODDS
0   112324699   Real Madrid     Celta Vigo  Celta Vigo  47.50
1   112324699   Real Madrid     Celta Vigo  Real Madrid 1.13
2   112324699   Real Madrid     Celta Vigo  The Draw    16.00
3   112369682   Celta Vigo      Valencia    Celta Vigo  3.30
4   112369682   Celta Vigo      Valencia    The Draw    3.55
5   112369682   Celta Vigo      Valencia    Valencia    2.43
因此,基本上在第二个数据框中,一场比赛有3行,每队一行,抽签选择一行,对应的赔率。 我现在要做的是添加关于从第二个数据帧到第一个数据帧的赔率的信息,因此我想以以下内容结束:

    Date        HomeTeam      AwayTeam    OddsHome    OddsDraw    OddsAway
0   06/01/14    Real Madrid   Celta Vigo  1.13        16.00       47.50
1   06/01/14    Celta Vigo    Valencia    3.30        3.55        2.43
我试图编写并应用一个查找函数,但失败得很惨。
也许你能帮我?

我会将df2重塑成新的\u df2,使其看起来像这样

df2['SELECTION'] = np.where(df2['SELECTION'] == df2['HomeTeam'], 'Home', np.where(df2['SELECTION'] == df2['AwayTeam'],'Away', 'Draw'))

new_df2 = df2.set_index(['EVENT_ID','HomeTeam','AwayTeam','SELECTION']).unstack().reset_index()
new_df2.columns = new_df2.columns.map(''.join)

    EVENT_ID    HomeTeam    AwayTeam    ODDSAway    ODDSDraw    ODDSHome
0   112324699   Real Madrid Celta Vigo  47.50       16.00       1.13
1   112369682   Celta Vigo  Valencia    2.43        3.55        3.30
现在使用合并

df1.merge(new_df2, on = ['HomeTeam', 'AwayTeam']).drop('EVENT_ID', axis = 1)
你得到

    Date        HomeTeam    AwayTeam    ODDSAway    ODDSDraw    ODDSHome
0   06/01/14    Real Madrid Celta Vigo  47.50       16.00       1.13
1   06/01/14    Celta Vigo  Valencia    2.43        3.55        3.30
另一种解决方案:

df2=df2.merge(df1,on=['HomeTeam','AwayTeam'],how='left')
df2['SELECTION']=df2.groupby('EVENT_ID').apply(lambda x : x.SELECTION.replace({x.HomeTeam.values[0]:'Home',x.AwayTeam.values[0]:'Away'})).values
df2.set_index(['HomeTeam','AwayTeam','Date','SELECTION']).ODDS.unstack().reset_index()
Out[1151]: 
SELECTION    HomeTeam   AwayTeam      Date   Away  Home  TheDraw
0           CeltaVigo   Valencia  06/01/14   2.43  3.30     3.55
1          RealMadrid  CeltaVigo  06/01/14  47.50  1.13    16.00