2017-10-11 8 views
2

J'ai deux dataframes que je veux combiner. La première se présente comme suit:Recherche de valeurs à partir d'une deuxième image

Date  HomeTeam  AwayTeam 
0 06/01/14 Real Madrid Celta Vigo 
1 06/01/14 Celta Vigo Valencia 

Et une seconde qui ressemble à ceci:

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 

Donc, fondamentalement, dans la deuxième dataframe un match a 3 rangs, un chacun pour les deux équipes et un pour le tirage (SELECTION) avec ses cotes correspondantes (ODDS).

Ce que je veux faire maintenant est d'ajouter les informations sur les chances de la seconde trame de données à la première trame de données, donc je veux finir avec les éléments suivants:

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 

J'ai essayé d'écrire et d'appliquer une fonction de recherche, mais échoué lamentablement.
Peut-être pourriez-vous m'aider?

Répondre

1

Une autre solution:

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 
3

Je remodeler en DF2 new_df2 pour ressembler à ce

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 

utilisent maintenant fusionner

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

Vous obtenez

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