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”?
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:
O puedes cambiar el código de creación del dataframe a esto:
Cualquiera de estos cambios debería hacer que el código funcione correctamente y produzca el dataframe esperado.