Python – Anular celdas en Pandas DataFrame

Supongamos que tengo DataFrame df :

 abc vf 3|4|5 v 2 6 vf 4|5 

Me gustaría producir este df :

 abc vf 3 vf 4 vf 5 v 2 6 vf 4 vf 5 

Sé cómo hacer esta transformación en R, usando el paquete tidyr .

¿Hay una manera fácil de hacer esto en los pandas?

    Tú podrías:

     import numpy as np df = df.set_index(['a', 'b']) df = df.astype(str) + '| ' # There's a space ' ' to match the replace later df = df.c.str.split('|', expand=True).stack().reset_index(-1, drop=True).replace(' ', np.nan).dropna().reset_index() # and replace also has a space ' ' 

    Llegar:

      ab 0 0 vf 3 1 vf 4 2 vf 5 3 v 2 6 4 vf 4 5 vf 5 

    Opción 1

     In [3404]: (df.set_index(['a', 'b'])['c'] .str.split('|', expand=True).stack() .reset_index(name='c').drop('level_2', 1)) Out[3404]: abc 0 vf 3 1 vf 4 2 vf 5 3 v 2 6 4 vf 4 5 vf 5 

    Opción 2 usando repeat y loc

     In [3503]: s = df.c.str.split('|') In [3504]: df.loc[df.index.repeat(s.str.len())].assign(c=np.concatenate(s)) Out[3504]: abc 0 vf 3 0 vf 4 0 vf 5 1 v 2 6 2 vf 4 2 vf 5 

    Detalles

     In [3505]: s Out[3505]: 0 [3, 4, 5] 1 [6] 2 [4, 5] Name: c, dtype: object