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 hacemos combinaciones de valores de columna presentes en un diccionario de dataframes?

Digamos que tenemos un diccionario de dataframes con 900 dataframes.

Cada dataframe tiene un número único de filas pero el mismo número de columnas (digamos 9) y los mismos nombres de columna. Digamos que una columna llamada “C1” común a todos los dataframes en el diccionario de dataframes tiene valores enteros que varían de 1 a 4000.

¿Cómo podemos crear un dataframe seleccionando una fila correspondiente a cualquier valor único en C1 de cada dataframe en el diccionario de dataframes? El dataframe resultante tendrá 900 filas y el mismo número de columnas que el dataframe original (es decir, 9).

No queremos que los valores de C1 seleccionados de cada dataframe en el diccionario sean iguales. Queremos diferentes combinaciones de valores.

No todos los dataframes tienen el mismo conjunto de valores de C1. Algunos pueden tener {11, 16, 20}, otros pueden tener {10, 16, 20}. Solo queremos crear dataframes a partir de los valores que existen en todos los dataframes. Entonces, en este ejemplo, solo queremos dataframes donde los valores de C1 sean 16 o 20.

¿Podemos crear también posibles combinaciones de dichos dataframes?

Ejemplo:

Digamos que el diccionario de dataframe tiene cuatro dataframes:

df1
C0 C1
a 1
a 2
a 3

df2
C0 C1
b 1
b 2
b 3

df3
C0 C1
c 1
c 2
c 3

df4
C0 C1
d 1

Un ejemplo de algunos dataframes posibles se muestra en la imagen de abajo:

Imagen

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para crear un dataframe seleccionando una fila correspondiente a cualquier valor único en C1 de cada dataframe en el diccionario de dataframes, podemos recorrer todos los dataframes en el diccionario y crear un nuevo dataframe seleccionando una fila correspondiente a cada valor único en C1. Esto se puede lograr agrupando el dataframe por C1 y luego seleccionando la primera fila de cada grupo.

    Para crear solo los dataframes a partir de los valores que existen en todos los dataframes, primero podemos crear un conjunto de todos los valores únicos en la columna C1 de todos los dataframes en el diccionario. Luego, para cada dataframe, podemos verificar si todos los valores únicos en el conjunto existen en la columna C1 del dataframe. Si no es así, podemos omitir ese dataframe.

    Para crear combinaciones posibles de tales dataframes, podemos usar la biblioteca itertools y la función combinations para generar todas las combinaciones posibles de los dataframes que tienen los valores de C1 deseados. Luego, podemos recorrer cada combinación y concatenar los dataframes horizontalmente utilizando la función pd.concat con el parámetro axis=1 para crear un solo dataframe.

    Aquí está el código para lograr esto:

    import itertools
    import pandas as pd
    
    # supongamos que el diccionario de dataframes se llama df_dict
    
    # crear un conjunto de todos los valores únicos en la columna C1 de todos los dataframes
    c1_set = set()
    for df in df_dict.values():
        c1_set.update(df['C1'].unique())
    
    # recorrer cada dataframe y crear un nuevo dataframe con una fila correspondiente a cada valor único en C1
    combined_df = pd.DataFrame(columns=df_dict[0].columns)  # supongamos que el primer dataframe es df_dict[0]
    for df in df_dict.values():
        if set(df['C1'].unique()) != c1_set:  # omitir si el dataframe no tiene todos los valores deseados
            continue
        selected_rows = df.groupby('C1').first().reset_index()
        combined_df = pd.concat([combined_df, selected_rows])
    
    # generar todas las combinaciones posibles de dataframes que tienen los valores de C1 deseados
    comb_list = []
    for i in range(1, len(df_dict)+1):
        comb_list += list(itertools.combinations([df for df in df_dict.values() if set(df['C1'].unique()) == c1_set], i))
    
    # concatenar los dataframes horizontalmente para cada combinación y crear un solo dataframe
    for comb in comb_list:
        result_df = pd.concat(comb, axis=1).fillna('')
        # hacer algo con result_df, por ejemplo, guardar en csv o procesar más
    

    Ten en cuenta que este código asume que todos los dataframes en el diccionario tienen el mismo orden de las columnas. Si este no es el caso, es posible que debas reordenar las columnas antes de concatenar los dataframes horizontalmente.

Comments are closed.