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.

Agregue una columna con valores basados en los valores de otra columna en el dataframe.

Muestra del Dataframe existente

datos = {‘portfolio’: [’40/60′, ’60/40′, ’80/20′, ‘100/0’]}

test_df = pd.DataFrame(datos)

imprimir el dataframe

test_df

Output:

portfolio
40/60
60/40
80/20
100/20

Estoy tratando de crear nuevas columnas para incluir el nombre del portfolio y el nombre del modelo basado en el valor de la columna existente. Nota: hay varias otras filas que incluyen estos valores/ratios existentes que componen una asignación completa de cada cartera. Entonces necesito que el nombre de la cartera se alinee con el valor correspondiente en la columna “Portfolio”. Aquí está el código actual que estoy utilizando:

def test(df):
columna1 = []
columna2 = []
for fila in df[‘portfolio’]:
if fila == ’40/60′:
columna1.append(‘Portfolio 1’)
columna2.append(‘Portfolio 1 Modelo’)
elif fila == ’60/40′:
columna1.append(‘Portfolio 2’)
columna2.append(‘Portfolio 2 Modelo’)
elif fila == ’80/20′:
columna1.append(‘Portfolio 3’)
columna2.append(‘Portfolio 3 Modelo’)
elif fila == ‘100/0’:
columna1.append(‘Portfolio 4’)
columna2.append(‘Portfolio 4 Modelo’)
else:
columna1.append(‘N/A’)
columna2.append(‘N/A’)

df['nombre_portfolio'] = columna1
df['nombre_modelo'] = columna2

return df

test(test_df)

Resultado esperado:

portfolio. nombre_portfolio. nombre_modelo
40/60 Portfolio 1 Portfolio 1 Modelo
60/40 Portfolio 2 Portfolio 2 Modelo
80/20 Portfolio 3 Portfolio 3 Modelo
100/0 Portfolio 4 Portfolio 4 Modelo

Resultado actual:

portfolio. nombre_portfolio. nombre_modelo
40/60 N/A N/A
60/40 N/A N/A
80/20 N/A N/A
100/0 N/A N/A

No estoy seguro de lo que me falta aquí y por qué los valores que se agregan a las columnas recién creadas solo están reconociendo la condición “else”?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema puede estar en la capitalización del nombre de la columna en el código en comparación con el nombre de la columna real en el dataframe. En el código, el nombre de la columna está en mayúscula como “Portfolio”, pero en el dataframe está en minúscula como “portfolio”. Por lo tanto, el código no identifica correctamente la columna y por defecto utiliza la condición “else” que agrega “N/A” a las nuevas columnas.

    Para solucionar esto, puedes cambiar el nombre de la columna en el código para que coincida con la versión en minúscula en el dataframe o cambiar el nombre de la columna en el dataframe para que coincida con la versión capitalizada en el código.

    Por ejemplo, puedes cambiar el código a esto:

    def test(df):
        columna1 = []
        columna2 = []
        for fila in df['portfolio']:
            if fila == '40/60':
                columna1.append('Portfolio 1')
                columna2.append('Portfolio 1 Model')
            elif fila == '60/40':
                columna1.append('Portfolio 2')
                columna2.append('Portfolio 2 Model')
            elif fila == '80/20':
                columna1.append('Portfolio 3')
                columna2.append('Portfolio 3 Model')
            elif fila == '100/0':
                columna1.append('Portfolio 4')
                columna2.append('Portfolio 4 Model')
            else:
                columna1.append('N/A')
                columna2.append('N/A')
    
        df['portfolio_name'] = columna1
        df['model_name'] = columna2
    
        return df
    
    test(test_df)
    

    O puedes cambiar el código de creación del dataframe a esto:

    datos = {'Portfolio': ['40/60', '60/40', '80/20', '100/0']}
    test_df = pd.DataFrame(datos)
    

    Cualquiera de estos cambios debería hacer que el código funcione correctamente y produzca el dataframe esperado.

Comments are closed.