2017-10-11 1 views
1

Comment puis-je obtenir le résultat attendu de la trame de données suivanteLa combinaison de lignes pandas géants dataframe par itérer

df 
      col_1    col_2 col_3 
    0 Non-Saved www.google.com 20,567 
    1    www.facebook.com  
    2    www.linkedin.com  
    3  Saved  www.Quora.com 6,337 
    4    www.gmail.com  

Résultat attendu:

  col_1    col_2 col_3 
    0 Non-Saved  www.google.com 20,567 
        www.facebook.com 
        www.linkedin.com 
    1 Saved   www.Quora.com 6,337 
         www.gmail.com 

De 5 rangées à 2 rangées en fusionnant les chaînes vides col_1 et col_3. En outre, concaténation des valeurs dans col_2 dans une cellule. Quelqu'un peut-il m'aider avec une fonction définie par l'utilisateur pour ce faire?

Répondre

2

Essayons:

df = df.apply(lambda x: x.str.strip()).replace('',np.nan) 

df.groupby(df.col_1.ffill())\ 
    .agg({'col_2': lambda x: ' '.join(x) ,'col_3':'first'})\ 
    .reset_index() 

Sortie:

 col_1            col_2 col_3 
0 Non-Saved www.google.com www.facebook.com www.linkedin.com 20,567 
1  Saved      www.Quora.com www.gmail.com 6,337 
+0

df = df.apply. (Lambda x: x.str.strip()) remplacer ('', np.nan) Donne une erreur: 'AttributeError: ('Impossible d'utiliser .str accessor avec des valeurs de chaîne, qui utilisent np.object_dtype dans pandas', est apparu à l'index NumberOfRequests ')' –

+0

Oui, mais voir ceci [SO Post] (https://stackoverflow.com/a/34324332/6361531) –

+0

Vous pouvez essayer '\ n'.join (x) –