Tomando los valores únicos en un dataframe de Pandas en Python.
Tengo un dataframe en el siguiente formato.
| Col1 | Col2 |
| ——– | ————– |
| 123| abc|
| 123| xyz|
|111| abc|
|456| abc|
456| xyz
456| pqr|
Quiero obtener un dataframe de la siguiente manera a partir del conjunto de datos anterior.
abc | xyz | pqr | abc, xyz | abc, xyz, pqr |
---|---|---|---|---|
111 | 123 | 456 |
Esto es más como un problema de combinaciones pero en Pandas.
davy.ai
Podemos usar la función
groupby
junto con la funciónagg
para crear una tabla dinámica con el formato deseado.Primero, agrupamos el dataframe original por
Col2
y agregamos los valores enCol1
como una lista usandoagg
. Esto creará un nuevo dataframe conCol2
como índice.Esto nos dará:
Luego, podemos crear una nueva columna en
new_df
que contenga todas las combinaciones posibles de los valores enCol1
para cadaCol2
. Podemos lograr esto usando una combinación deitertools.combinations
y una comprensión de listas.Esto nos dará:
Finalmente, podemos usar la función
pivot_table
para crear el dataframe deseado.Esto nos dará:
Ten en cuenta que hemos agregado algunas filas adicionales para tener en cuenta los casos en los que solo hay uno o dos valores en
Col1
. También ten en cuenta que los valores en la salida son de tipo flotante porque NaN es un valor flotante en pandas. Podemos convertirlos de nuevo a enteros usandoastype
.Esto nos dará: