escribir una función que debe cumplir una condición en una fila y devolver los resultados esperados
def bt_quantity(df): df = bt_level(df) df['Marker_change'] = df['Marker'] - df['Marker'].shift(1).fillna(0).round(0).astype(int) df['Action'] = np.where(df['Marker_change'] > 0, "BUY", "") def turtle_split(row): if df['Action'] == 'Buy': return baseQ * (turtle ** row['Marker'] - 1) // (turtle - 1) else: return 0 df['Traded_q'] = df.apply(turtle_split, axis=1).round(0).astype(int) df['Net_q'] = df['Traded_q'].cumsum().round(0).astype(int) print(df.head(39)) return dfEste es un problema común, y no estoy usando ningún "y" o "o" en el código. sigo recibiendo el siguiente error
Intenté cambiar str a int (COMPRAR >> 1), sin progreso. PD: el conjunto de datos es enorme y estoy usando varios módulos y funciones para trabajar en este proyecto.
Como dijiste, este es realmente un problema común, encontrarás que las respuestas del valor de verdad de una serie son ambiguas. Use a.empty, a.bool(), a.item(), a.any() o a.all()
Pero para abordar su caso particular, esta no es una forma muy eficiente de hacerlo ya que el conjunto de datos es enorme. Deberías usar Numpy. Eso acortará el tiempo de ejecución drásticamente.
Veo dos problemas con tu fragmento
def bt_quantity(df): df = bt_level(df) df['Marker_change'] = df['Marker'] - df['Marker'].shift(1).fillna(0).round(0).astype(int) df['Action'] = np.where(df['Marker_change'] > 0, "BUY", "") def turtle_split(row): if row['Action'] == 'BUY': return baseQ * (turtle ** row['Marker'] - 1) // (turtle - 1) else: return 0 df['Traded_q'] = df.apply(turtle_split, axis=1).round(0).astype(int) df['Net_q'] = df['Traded_q'].cumsum().round(0).astype(int) print(df.head(39)) return df