1

I have this DF:

Elemento_lista DISPLAYNAME Rdo_Encontrado
0 90S VALASION [('90S VALASION', 100, 0), ('90S VALASION', 100, 1), ('90S VALASION', 100, 2), ('90S VALASION', 100, 3)]
1 ADIZERO RC 2 W [('ADIZERO RC 2 W', 100, 11), ('ADIZERO RC 2 W', 100, 12), ('ADIZERO RC 2 W', 100, 13), ('ADIZERO RC 2 W', 100, 14)]
2 ASWEERUN [('ASWEERUN', 100, 16), ('ASWEERUN', 100, 17), ('90S VALASION', 34, 0), ('90S VALASION', 34, 1)]

As it can bee seen, Rdo_Encontrado Column´s value is a List. I need a new row, for each element, and 3 new columns, with values from each list element. The Output should look like this:

Elemento_lista DISPLAYNAME Coincidencia Score idx
0 90S VALASION 90S VALASION 100 0
0 90S VALASION 90S VALASION 100 1
0 90S VALASION 90S VALASION 100 2
0 90S VALASION 90S VALASION 100 3
1 ADIZERO RC 2 W ADIZERO RC 2 W 100 11
1 ADIZERO RC 2 W ADIZERO RC 2 W 100 12
1 ADIZERO RC 2 W ADIZERO RC 2 W 100 13
1 ADIZERO RC 2 W ADIZERO RC 2 W 100 14
2 ASWEERUN ASWEERUN 100 16
2 ASWEERUN ASWEERUN 100 17
2 ASWEERUN ASWEERUN 34 0
2 ASWEERUN ASWEERUN 34 1

Is it possible to do something like this?. I couldn´t find a way...

Maximiliano Vazquez
  • 196
  • 1
  • 2
  • 12
  • 1
    `explode()` will get you individual rows and [this question](https://stackoverflow.com/questions/35491274/split-a-pandas-column-of-lists-into-multiple-columns) will expand your tuple elements to columns – G. Anderson May 03 '22 at 21:10
  • Hi, @G.Anderson, thanks for the answer , but but it´s not working for me...After df = df.explode ("Rdo_Encontrado") I get the Rdo_encontrado column with only one value in each row, so I have no values to expand in column, there is only one per row... – Maximiliano Vazquez May 03 '22 at 22:44

1 Answers1

1

Try:

# make sure you don't have strings in Rdo_Encontrado column:

from ast import literal_eval
df["Rdo_Encontrado"] = df["Rdo_Encontrado"].apply(literal_eval)



df = df.explode("Rdo_Encontrado")
df[["Coincidencia", "Score", "idx"]] = df.pop("Rdo_Encontrado").apply(pd.Series)
print(df.to_markdown())

Prints:

Elemento_lista DISPLAYNAME Coincidencia Score idx
0 0 90S VALASION 90S VALASION 100 0
0 0 90S VALASION 90S VALASION 100 1
0 0 90S VALASION 90S VALASION 100 2
0 0 90S VALASION 90S VALASION 100 3
1 1 ADIZERO RC 2 W ADIZERO RC 2 W 100 11
1 1 ADIZERO RC 2 W ADIZERO RC 2 W 100 12
1 1 ADIZERO RC 2 W ADIZERO RC 2 W 100 13
1 1 ADIZERO RC 2 W ADIZERO RC 2 W 100 14
2 2 ASWEERUN ASWEERUN 100 16
2 2 ASWEERUN ASWEERUN 100 17
2 2 ASWEERUN 90S VALASION 34 0
2 2 ASWEERUN 90S VALASION 34 1

EDIT: Added ast.literal_eval

Andrej Kesely
  • 168,389
  • 15
  • 48
  • 91
  • Hi @Andrej Kesely, thanks for the answer, but it´s not working for me...After `df = df.explode ("Rdo_Encontrado")` I get the Rdo_encontrado column with only one value in each row, so after `df[["Coincidencia", "Score", "idx"]] = df.pop("Rdo_Encontrado").apply(pd.Series)`, I get this error: ValueError: Columns must be same length as key – Maximiliano Vazquez May 03 '22 at 22:42
  • @MaximilianoVazquez I've edited my answer. Make sure you don't have string in `Rdo_Encontrado` column. Convert it to python lists with `ast.literal_eval` first. – Andrej Kesely May 03 '22 at 22:46