Cómo dividir y filas duplicadas de acuerdo a la cadena en una columna con python / pandas?

Tengo un df donde algunos de los valores que se agregan a la misma fila como este falso df:

    [['Apple, Kiwi, Clementine', np.nan , 'Cycling', 5], 
     ['Kiwi', 'Blue',  np.nan , 20], 
     ['Banana, Clementine',  np.nan , 'Hockey', 12], 
     ['Apple', 'Purple', 'Triathlon', 15], 
     ['Kiwi',  np.nan, 'Swimming', 8]]), 
                     columns=['fruit', 'colour', 'sport', 'wins'])

Lo que me gustaría es duplicar las filas con varias frutas, mientras que la división de la primera entrada que contenga sólo un fruto. enter image description here En el final quiero trazar el promedio gana por fruto. Así que si hay una forma de agrupación donde cada fruta mencionados se agrupan con la correcta fruta por así decirlo que también funcionaría.

He probado algunos de manipulación de cadenas, pero entonces es simplemente dividido y los valores en las otras columnas no se duplican. Es bastante frustrante, ya sé cómo hacerlo en r, pero soy un principiante en python.

1 Respuestas

  • anky_91
    4 de mayo de 2019

    Uso:

    s=pd.DataFrame([[x] + [z] for x, y in zip(df.index,df.fruit.str.split(',')) for z in y],
                   columns=[0,'Fruit'])
    df_new=s.merge(df,left_on=0,right_index=True).drop(0,1)
    print(df_new)
    

             Fruit                    fruit  colour      sport  wins
    0        Apple  Apple, Kiwi, Clementine     NaN    Cycling     5
    1         Kiwi  Apple, Kiwi, Clementine     NaN    Cycling     5
    2   Clementine  Apple, Kiwi, Clementine     NaN    Cycling     5
    3         Kiwi                     Kiwi    Blue        NaN    20
    4       Banana       Banana, Clementine     NaN     Hockey    12
    5   Clementine       Banana, Clementine     NaN     Hockey    12
    6        Apple                    Apple  Purple  Triathlon    15
    7         Kiwi                     Kiwi     NaN   Swimming     8