I tienen un conjunto de datos de precio OHLC, que he analizado desde CSV en una trama de datos pandas y resampled 15 bar min:Adición de la columna (s) calculado a una trama de datos en pandas
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 500047 entries, 1998-05-04 04:45:00 to 2012-08-07 00:15:00
Freq: 15T
Data columns:
Close 363152 non-null values
High 363152 non-null values
Low 363152 non-null values
Open 363152 non-null values
dtypes: float64(4)
me gustaría agregue varias columnas calculadas, empezando por simples, como el Periodo de rango (HL) y luego booleanos para indicar la aparición de patrones de precios que definiré, por ej. un patrón de vela de martillo, para los que una definición de ejemplo:
def closed_in_top_half_of_range(h,l,c):
return c > l + (h-1)/2
def lower_wick(o,l,c):
return min(o,c)-l
def real_body(o,c):
return abs(c-o)
def lower_wick_at_least_twice_real_body(o,l,c):
return lower_wick(o,l,c) >= 2 * real_body(o,c)
def is_hammer(row):
return lower_wick_at_least_twice_real_body(row["Open"],row["Low"],row["Close"]) \
and closed_in_top_half_of_range(row["High"],row["Low"],row["Close"])
problema básico: ¿Cómo puedo asignar la función a la columna, específicamente donde me gustaría hacer referencia a más de una otra columna o la fila entera o lo que sea?
This post se trata de agregar dos columnas calculadas fuera de una sola columna fuente, que está cerca, pero no del todo.
Y un poco más avanzado: para patrones de precios que se determinan con referencia a más de una barra (T), ¿cómo puedo hacer referencia a diferentes filas (por ejemplo, T-1, T-2, etc.) desde la definición de la función ?
Muchas gracias de antemano.
También es útil, muchas gracias. Muchas formas de despellejar un gato y todo. Te daría un voto positivo, pero esta es mi primera pregunta sobre StackOverflow y lamentablemente no tengo suficientes representantes. Supongo que no tiene ninguna idea sobre la segunda parte, es decir, hace referencia a filas vecinas en el marco de datos desde la función de mapa/aplicación. Saludos de nuevo. – ultra909
Gran ejemplo. Código muy legible –
Por alguna razón, el método que utiliza 'map (f, col1, col2)' es mucho más rápido que 'df.apply (..., axis = 1)'. el mapa toma 0.35s vs df.apply tomando 26s para un dataframe de 1M fila. ¿Alguna idea de por qué? (Python 2.7 y pandas 0.18.1) – MohamedEzz