Ya no busques más en otras webs porque has llegado al espacio indicado, tenemos la respuesta que quieres hallar sin problemas.
Solución:
Creo que una solución elegante es usar el where
método (ver también el API docs
):
In [37]: values = df.Prices * df.Amount
In [38]: df['Values'] = values.where(df.Action == 'Sell', other=-values)
In [39]: df
Out[39]:
Prices Amount Action Values
0 3 57 Sell 171
1 89 42 Sell 3738
2 45 70 Buy -3150
3 6 43 Sell 258
4 60 47 Sell 2820
5 19 16 Buy -304
6 56 89 Sell 4984
7 3 28 Buy -84
8 56 69 Sell 3864
9 90 49 Buy -4410
Además, esta debería ser la solución más rápida.
Puede utilizar el marco de datos apply
método:
order_df['Value'] = order_df.apply(lambda row: (row['Prices']*row['Amount']
if row['Action']=='Sell'
else -row['Prices']*row['Amount']),
axis=1)
Por lo general, es más rápido usar estos métodos en lugar de bucles for.
Si estamos dispuestos a sacrificar la concisión de la solución de Hayden, también se podría hacer algo como esto:
In [22]: orders_df['C'] = orders_df.Action.apply(
lambda x: (1 if x == 'Sell' else -1))
In [23]: orders_df # New column C represents the sign of the transaction
Out[23]:
Prices Amount Action C
0 3 57 Sell 1
1 89 42 Sell 1
2 45 70 Buy -1
3 6 43 Sell 1
4 60 47 Sell 1
5 19 16 Buy -1
6 56 89 Sell 1
7 3 28 Buy -1
8 56 69 Sell 1
9 90 49 Buy -1
Ahora hemos eliminado la necesidad de la if
declaración. Usando DataFrame.apply()
también eliminamos el for
círculo. Como señaló Hayden, las operaciones vectorizadas siempre son más rápidas.
In [24]: orders_df['Value'] = orders_df.Prices * orders_df.Amount * orders_df.C
In [25]: orders_df # The resulting dataframe
Out[25]:
Prices Amount Action C Value
0 3 57 Sell 1 171
1 89 42 Sell 1 3738
2 45 70 Buy -1 -3150
3 6 43 Sell 1 258
4 60 47 Sell 1 2820
5 19 16 Buy -1 -304
6 56 89 Sell 1 4984
7 3 28 Buy -1 -84
8 56 69 Sell 1 3864
9 90 49 Buy -1 -4410
Esta solución requiere dos líneas de código en lugar de una, pero es un poco más fácil de leer. Sospecho que los costos computacionales también son similares.
Reseñas y calificaciones
Finalizando este artículo puedes encontrar las críticas de otros usuarios, tú asimismo eres capaz mostrar el tuyo si te gusta.