0
votes

Comment fusionner la série chronologique Panda Dataframe sans perdre la ligne?

Rubrique
  1. Comment fusionner la série Time Series Dataframe sans perdre des lignes? Li>
  2. Le résultat final La forme DataFrame doit être basée sur laquelle Dataframe a une forme de DataFrame plus grande. LI> ol>

    df1: p> xxx pré>

    df1.Shape est autour de 3000 p> xxx pré>

    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
    


0 commentaires

3 Réponses :


1
votes

Je pense que ce que vous voulez est un Rejoindre extérieur

pd.merge(df1, df2, how = 'outer', on = 'Time')


3 commentaires

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



1
votes

Définissez l'index pour être l'heure, puis rejoindre Utilisation de externe . Vous pouvez utiliser réduire à partir de FuncTools pour faire la syntaxe concise. xxx

sortie: xxx

Remarque, dans votre entrée fournie, vous avez deux entrées pour 17.12.2014 13:56:12 dans df2 de sorte que la valeur dans df3 a été amenée à ces deux rangées.


3 commentaires

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 a une colonne nommée 'Time' et vous .set_index ('Time') La jointure est garantie lignes basées sur temps . 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 avec < Code> pd.to_dateTime 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 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.



1
votes

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. XXX

appris de @ted Petrou, tout en prenant son cours en ligne.

avec fusion: < / p> xxx

ou xxx


0 commentaires