Merge Dataframe avec pandas, sans dupliquer les colonnes
Bonjour à tous,
J'essaye d’agglomérer des données assez disparates contenues dans une dizaine de fichiers csv. Ces fichiers contiennent approximativement 100 colonnes, mais cela varie. La grande majorité de ces colonnes sont redondantes d'un fichier à l'autre (mais pas toutes!). Cependant, elles ont toutes une colonne en commun, qu'on nomme 'date_time' ici, qui est utilisée comme point d'encrage pour l'agglomération des dataframes. Lorsque j'effectue un pandas.merge() entre deux dataframes qui ont une colonne en commun (imaginons potato), au lieu d'ajouter les nouvelles données à la colonne existante, cette colonne est dupliquée et renommée automatiquement (potato_x, potato_y). Comment éviter la duplication des colonnes ?
On peut résumer mon problème avec le petit exemple ci-dessous.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # Reference dataframe
df = pd.DataFrame({'date_time':['2018-06-01 00:00:00','2018-06-01 00:30:00','2018-06-01 01:00:00','2018-06-01 01:30:00']})
# Dataframes to merge to reference dataframe
df1 = pd.DataFrame({'date_time':['2018-06-01 00:30:00','2018-06-01 01:00:00'],
'potato':[13,21]})
df2 = pd.DataFrame({'date_time':['2018-06-01 01:30:00','2018-06-01 02:00:00','2018-06-01 02:30:00'],
'carrot':[14,8,32]})
df3 = pd.DataFrame({'date_time':['2018-06-01 01:30:00','2018-06-01 02:00:00'],
'potato':[27,31], 'zucchini':[11,1]})
df = df.merge(df1, how='left', on='date_time')
df = df.merge(df2, how='left', on='date_time')
df = df.merge(df3, how='left', on='date_time') |
ce qui donne comme résultat
Code:
1 2 3 4 5
| date_time potato_x carrot potato_y zucchini
0 2018-06-01 00:00:00 NaN NaN NaN NaN
1 2018-06-01 00:30:00 13.0 NaN NaN NaN
2 2018-06-01 01:00:00 21.0 NaN NaN NaN
3 2018-06-01 01:30:00 NaN 14.0 27.0 11.0 |
alors que je voudrais
Code:
1 2 3 4 5
| date_time potato carrot zucchini
0 2018-06-01 00:00:00 NaN NaN NaN
1 2018-06-01 00:30:00 13.0 NaN NaN
2 2018-06-01 01:00:00 21.0 NaN NaN
3 2018-06-01 01:30:00 27.0 14.0 11.0 |
Merci beaucoup !