es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo mezclar según la columna (id) pero mantener True ascendente.

Tengo un dataframe estructurado de la siguiente manera:

>>>df
   a  b  id<br>
0  1  4  3<br>
1  4  1  2<br>
2  7  5  1

<p>3  2  9  3
4  4  11 2
5  2  7  1</p>

<p>6  3  4  2
7  9  2  1

He agregado párrafos para facilitar la lectura del código.

Ahora quiero mezclar el dataframe según el id, pero mantener el orden descendente inicial de la columna id. ¿Cuál es la mejor manera?
Una posible salida se vería así:

>>>df
   a  b  id<br>
0  3  4  2
1  9  2  1

2  2  9  3
3  4  11 2
4  2  7  1

5  1  4  3<br>
6  4  1  2<br>
7  7  5  1

En principio, solo quiero que los bloques se mezclen o se coloquen aleatoriamente en otro lugar.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para mezclar el dataframe según la columna ‘id’ manteniendo el orden descendente inicial de la columna ‘id’, podemos primero ordenar el dataframe basándonos en la columna ‘id’ en orden descendente utilizando la función sort_values(). Luego podemos usar la función groupby() para agrupar el dataframe por la columna ‘id’ y aplicar la función sample() a cada grupo para mezclar las filas dentro de cada grupo. Finalmente, podemos restablecer el índice del dataframe mezclado utilizando la función reset_index().

    El código para mezclar el dataframe según la columna ‘id’ manteniendo el orden descendente inicial de la columna ‘id’ es el siguiente:

    shuffled_df = df.sort_values('id', ascending=False).groupby('id').apply(lambda x: x.sample(frac=1)).reset_index(drop=True)
    

    Este código primero ordena el dataframe original df basándose en la columna ‘id’ en orden descendente usando sort_values('id', ascending=False). Luego agrupa el dataframe ordenado por la columna ‘id’ usando groupby('id'). Para cada grupo, aplica la función sample(frac=1) para mezclar las filas dentro del grupo. El argumento frac=1 especifica que queremos muestrear todo el grupo, lo que efectivamente lo mezcla. Finalmente, restablece el índice del dataframe mezclado utilizando reset_index(drop=True) para obtener un nuevo dataframe mezclado llamado shuffled_df.

    Este código debería producir la salida deseada mostrada en la pregunta, donde los bloques están mezclados aleatoriamente dentro del dataframe pero aún mantienen su orden descendente original basado en la columna ‘id’.

Comments are closed.