J'ai les deux blocs de données suivants que je veux fusionner.Python: fusionner une trame de données Pandas avec un tableau croisé dynamique
df1:
id time station
0 a 22.08.2017 12:00:00 A1
1 b 22.08.2017 12:00:00 A3
2 a 22.08.2017 13:00:00 A2
...
pivot:
station A1 A2 A3
0 time
1 22.08.2017 12:00:00 10 12 11
2 22.08.2017 13:00:00 9 7 3
3 22.08.2017 14:00:00 2 3 4
4 22.08.2017 15:00:00 3 2 7
...
il devrait ressembler à:
merge:
id time station value
0 a 22.08.2017 12:00:00 A1 10
1 b 22.08.2017 12:00:00 A3 11
2 a 22.08.2017 13:00:00 A2 7
...
Maintenant, je veux ajouter une colonne dans la trame de données à la juste valeur du tableau croisé dynamique. J'ai échoué en incluant les étiquettes de colonne pour la fusion. je construisais quelque chose comme ça, mais ça ne marche pas:
merge = pd.merge(df1, pivot, how="left", left_on=["time", "station"], right_on=["station", pivot.columns])
Toute aide?
EDIT:
Comme conseillé, au lieu du tableau croisé dynamique j'ai essayé d'utiliser les données suivantes:
df2:
time station value
22.08.2017 12:00:00 A1 10
22.08.2017 12:00:00 A2 12
22.08.2017 12:00:00 A3 11
...
22.08.2017 13:00:00 A1 9
22.08.2017 13:00:00 A2 7
22.08.2017 13:00:00 A3 3
Le tableau contient environ 1300 stations différentes pour chaque horodatage. Dans l'ensemble, j'ai plus de 115.000.000 lignes. Mon df1 a 5.000.000 lignes.
Maintenant, j'ai essayé de fusionner df1.head (100) et df2, mais dans le résultat toutes les valeurs sont nan. Par conséquent, je ceci:
merge = pd.merge(df1.head(100), df2, how="left", on=["time", "station"])
Un autre problème est que la fusion prend quelques minutes pour que j'attends l'ensemble DF1 prendra plusieurs jours.
Pouvez-vous envoyer comment vous avez df2 avec des données d'échantillon? –
Que voulez-vous dire par df2? Si vous appliquez à la trame de données que je veux atteindre, je découvre à quelle heure et quelle station appartient au premier identifiant. Ensuite, je compare avec le cadre de données de pivot et obtenir la valeur pour la même heure et la même station et continuer avec la ligne suivante. J'ai donc créé une boucle for, mais ce n'est pas si rapide. C'est la raison pour laquelle je veux le faire en fusionnant les données. – Timo
Désolé j'ai mal interprété - 'pivot' dataframe. Avez-vous des exemples de données pour recréer ceci? Je me demande s'il y a une meilleure façon de faire pivoter cela. –