Une façon simple est de convertir les noms dans les deux dataframes dans un format commun afin qu'ils puissent être adaptés. * Supposons que df1
noms sont au format L. Messi
et df2
noms sont au format lionel messi
. A quoi ressemblerait un format commun? Vous avez plusieurs choix, mais une option serait en minuscules, avec juste la première initiale suivie d'une période: l. messi
.
df1 = pd.DataFrame({'names': ['L. Messi'], 'x': [1]})
df2 = pd.DataFrame({'names': ['lionel messi'], 'y': [2]})
df1.names = df1.names.str.lower()
df2.names = df2.names.apply(lambda n: n[0] + '.' + n[n.find(' '):])
df = df1.merge(df2, left_on='names', right_on='names')
* Remarque: Cette approche est totalement dépendante des noms étant de cette façon « matchable ». Il y a beaucoup de cas qui pourraient faire échouer cette approche simple. Si une équipe a deux membres, Abby Wambach
et Aaron Wambach
, ils ressembleront tous les deux à a. wambach
. Si une trame de données essaie de les différencier en utilisant d'autres initiales dans leur nom, comme m.a. wambach
et a.k. wambach
, la correspondance naïve échouera. La façon dont vous gérez cela dépend de la taille de vos données - peut-être que vous pouvez essayer de faire correspondre la plupart des joueurs de cette façon, et voir qui est laissé tomber, et écrire du code personnalisé à partir d'eux.
Copie possible de [Fusionner deux ensembles de données dans Pandas] (https://stackoverflow.com/questions/43909479/merge-two-datasets-in-pandas) – thatrockbottomprogrammer
Il n'est pas facile de fusionner en fonction d'une correspondance partielle – Dark