df1: p> df1.Shape est autour de 3000 p> df2.Pape est autour 20000 P> Time Value1 Value2 Value3
1 17.12.2014 13:55:56 NaN 2.9 NaN
2 17.12.2014 13:55:58 NaN 6.0 NaN
3 17.12.2014 13:55:58 NaN 3.6 NaN
4 17.12.2014 13:55:59 NaN 2.8 NaN
5 17.12.2014 13:56:07 NaN 1.9 NaN
6 17.12.2014 13:56:12 NaN 2.9 NaN
7 17.12.2014 13:56:12 NaN 3.0 3.2
8 17.12.2014 13:56:13 NaN 1.8 NaN
9 17.12.2014 13:56:15 NaN 2.2 NaN
10 17.12.2014 13:56:15 NaN 2.0 NaN
11 17.12.2014 13:56:41 NaN 1.7 NaN
12 17.12.2014 13:56:41 NaN 2.4 NaN
13 17.12.2014 13:56:42 NaN 2.8 NaN
14 17.12.2014 13:56:42 NaN 1.9 NaN
15 17.12.2014 13:56:43 NaN 2.8 NaN
16 17.12.2014 13:56:43 NaN 1.7 NaN
17 17.12.2014 13:56:44 NaN 2.8 NaN
18 17.12.2014 13:56:45 NaN 1.7 NaN
19 17.12.2014 13:56:56 1.9 NaN NaN
20 17.12.2014 13:56:58 3.1 NaN NaN
21 17.12.2014 13:56:59 2.8 2.8 NaN
22 17.12.2014 13:57:10 2.3 NaN NaN
23 17.12.2014 13:57:11 3.1 NaN NaN
20 17.12.2014 14:03:08 NaN 1.7 NaN
3 Réponses :
Je pense que ce que vous voulez est un Rejoindre extérieur
pd.merge(df1, df2, how = 'outer', on = 'Time')
PD.Merge (DF1, DF2, Comment = 'externe', ON = 'Time'). Sort_values (par = 'Time')
Travailler avec seulement deux Dataframe. Si j'ajoute troisième image, il montre comment a eu une erreur de valeur multiple. Supposons DF1 ayant 1000 DF2 ayant 2000. Quand j'ai fusionné, j'ai eu environ 3000 rangées. Supposons que j'ai encore 3000 rangées dans DF3. Maintenant, j'ai répété avec la même commande comme pd.merge (fusionné, df3, comment = 'externe', on = "heure"). Sort_values (par = "temps") .now attente est de 6000 lignes. Mais je reçois la dernière fusion avec 9000 rangées
@ Thangaraj1980, 1. Votre colonne de temps a une valeur dupliquée; 2. Lorsque vous faites une jointure extérieure, le résultat ne doit pas être proche de Len (DF1) + LEN (DF2). Qui indique que DF1 ["temps"] et DF2 ["temps"] ne correspond presque jamais
Définissez l'index pour être l'heure, puis rejoindre Utilisation de Remarque, dans votre entrée fournie, vous avez deux entrées pour externe code>. Vous pouvez utiliser
réduire code> à partir de
FuncTools code> pour faire la syntaxe concise.
sortie: h3>
17.12.2014 13:56:12 code> dans
df2 code> de sorte que la valeur dans
df3 code> a été amenée à ces deux rangées. p> p>
J'ai essayé ça fusionne. Mais je dois vérifier si les données sont bien fusionnées. Pour plus de clarification requise, ma forme DF1 réelle est (3000,2) la taille DF2 est (20000,2) et DF3 est (50000,2). Mais la fusion finale montrant (82 000,3). Avez-vous une idée pourquoi?
@ Thagaraj1980 Tant que chaque Dataframe code> a une colonne nommée
'Time' code> et vous
.set_index ('Time') code> La jointure est garantie lignes basées sur
temps code>. Maintenant, dans votre exemple, l'heure était toujours dans le même format, alors je n'avais donc pas besoin de faire quoi que ce soit, mais si elles sont dans des formats différents, il peut être plus sûr de la convertir pour la première fois à un
DateTime code> avec < Code> pd.to_dateTime code> qui formate toutes les dates à être identiques
@ Thagaraj1980 La longueur de la sortie finale dépend de la duplication dans chaque cadre. Dans votre exemple de données, il y a des entrées de temps en double, il s'agit probablement de la cause. Par exemple, si vous avez 2 dataframes code> chacun avec seulement 10 entrées ayant la même heure exacte, le résultat d'une fusion extérieure est de 100 rangées (10 * 10). Plausiblement, votre résultat pourrait avoir n'importe où entre 50 000 et 3 trillions de rangées, de sorte que 82 000 rangées sont sans surprises.
La méthode de jointure est construite exactement pour ces types de situations. Vous pouvez rejoindre n'importe quel nombre de DataFrames avec cela. Le DataFrame appelant joint avec l'index de la collection de données de données transcédents. Pour travailler avec plusieurs dataframes, vous devez mettre les colonnes de jonction dans l'index. appris de @ted Petrou, tout en prenant son cours en ligne. P> avec fusion: < / p> ou p>