从第二个datafram查找值

2024-06-25 23:13:39 发布

您现在位置:Python中文网/ 问答频道 /正文

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

    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

我试图编写并应用查找函数,但失败得很惨。
也许你能帮我?你知道吗


Tags: the数据eventiddate情况realdraw
2条回答

我将把df2重塑成新的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

相关问题 更多 >