varias seleccionar data como columnas columna agregar dataframe pandas

dataframe - seleccionar - Rellenar condicionalmente valores de columna basados en el valor de otras columnas en pandas



seleccionar columnas pandas python (3)

Tengo un DataFrame con algunas columnas. Una columna contiene un símbolo para el que se usa la moneda, por ejemplo, un euro o un signo de dólar. Otra columna contiene un valor de presupuesto. Entonces, por ejemplo, en una fila podría significar un presupuesto de 5000 en euros y en la siguiente fila podría decirse un presupuesto de 2000 en dólares.

En pandas me gustaría agregar una columna extra a mi DataFrame, normalizando los presupuestos en euros. Básicamente, para cada fila, el valor en la nueva columna debe ser el valor de la columna de presupuesto * 1 si el símbolo en la columna de moneda es un símbolo del euro, y el valor en la nueva columna debe ser el valor de la columna del presupuesto * 0,78125 si el símbolo en la columna de la moneda es un signo de dólar.

Sé cómo agregar una columna, completarla con valores, copiar valores de otra columna, etc., pero no cómo llenar la nueva columna de forma condicional en función del valor de otra columna.

¿Alguna sugerencia?


Probablemente quieras hacer

df[''Normalized''] = np.where(df[''Currency''] == ''$'', df[''Budget''] * 0.78125, df[''Budget''])


Resultados similares a través de un estilo alternativo pueden ser escribir una función que realiza la operación que desea en una fila, utilizando la sintaxis row[''fieldname''] para acceder a valores / columnas individuales, y luego realizar un método DataFrame.apply sobre ella

Esto hace eco de la respuesta a la pregunta vinculada aquí: los pandas crean una nueva columna basada en valores de otras columnas

def normalise_row(row): if row[''Currency''] == ''$'' ... ... ... return result df[''Normalized''] = df.apply(lambda row : normalise_row, axis=1)


Tomando la sugerencia de Tom Kimber un paso más allá, puede usar un diccionario de funciones para establecer varias condiciones para sus funciones. Esta solución está expandiendo el alcance de la pregunta.

Estoy usando un ejemplo de una aplicación personal.

# write the dictionary def applyCalculateSpend (df_name, cost_method_col, metric_col, rate_col, total_planned_col): calculations = { ''CPMV'' : df_name[metric_col] / 1000 * df_name[rate_col], ''Free'' : 0 } df_method = df_name[cost_method_col] return calculations.get(df_method, "not in dict") # call the function inside a lambda test_df[''spend''] = test_df.apply(lambda row: applyCalculateSpend( row, cost_method_col=''cost method'', metric_col=''metric'', rate_col=''rate'', total_planned_col=''total planned''), axis = 1) cost method metric rate total planned spend 0 CPMV 2000 100 1000 200.0 1 CPMV 4000 100 1000 400.0 4 Free 1 2 3 0.0