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.

Muestreo de un conjunto de datos estático para crear un dataframe, ignorar el índice en Python.

Estoy tratando de crear algunas muestras aleatorias (de un tamaño dado) a partir de un dataframe estático. El objetivo es crear múltiples columnas para cada muestra (y cada muestra extraída tiene el mismo tamaño). Espero ver múltiples columnas de la misma longitud (es decir, tamaño de muestra) en el dataframe completamente muestreado, pero tal vez la función “append” no sea la forma correcta de hacerlo. Aquí está el código:

# crear dataframe de muestra
target_df = pd.DataFrame(np.arange(1000))
target_df.columns=['pl']

# crear el muestreador:
sample_num = 5
sample_len = 10
df_max_row = len(target_df) - sample_len 

for i in range(sample_num):
    rndm_start = np.random.choice(df_max_row, 1)[0]
    rndm_end = rndm_start + sample_len
    slicer = target_df.iloc[rndm_start:rndm_end]['pl']
    sampled_df = sampled_df.append(slicer, ignore_index=True)

sampled_df = sampled_df.T

La salida de esto se muestra en la imagen de abajo. La línea roja muestra el índice que quiero eliminar.

Actual output

El resultado deseado se muestra debajo de eso. ¿Cómo puedo hacer que esto suceda?

Desired output

¡Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para eliminar el índice no deseado, puedes usar el método .reset_index(drop=True) en el sampled_df resultante. Este método restablecerá el índice para comenzar desde cero y eliminará la columna de índice antigua.

    Aquí hay un fragmento de código actualizado con el método agregado:

    import pandas as pd
    import numpy as np
    
    # crear un dataframe de muestra
    target_df = pd.DataFrame(np.arange(1000))
    target_df.columns=['pl']
    
    # crear el muestreador:
    sample_num = 5
    sample_len = 10
    df_max_row = len(target_df) - sample_len 
    sampled_df = pd.DataFrame()
    
    for i in range(sample_num):
        rndm_start = np.random.choice(df_max_row, 1)[0]
        rndm_end = rndm_start + sample_len
        slicer = target_df.iloc[rndm_start:rndm_end]['pl']
    
        sampled_df = sampled_df.append(slicer, ignore_index=True)
    
    sampled_df = sampled_df.reset_index(drop=True).T
    

    Esto debería darte la salida deseada.

Comments are closed.