Reescrito con lo que creo que es una pregunta más fácil de entender.

Creo que el problema es no poder agregar más de un elemento a una lista a la vez.

Imagínese usando df.iloc [3: 6], pero en su lugar es: myList.append (Start: Finish)

Pseudocódigo

# looping through an index and adding something to it when true
for (x)each index in the index:
    if condition is true:
        myList.append(x)

El siguiente código funciona, pero es ineficiente

# looping through an index and adding something to it when true
for (x)each index in the index:
    if condition is true:
        myList.append(x),myList.append(x+1),myList.append(x+2)

Lo que me gustaría poder hacer

# looping through an index and adding something to it when true
for (x)each index in the index:
    if condition is true:
        myList.append(x -> x+2) #myList.append(x+1),myList.append(x+2)

# so I want: myList.append(x to x+1 to x+2) 
# but without having to keep writing x+this , x+that ...

En lugar de esto

myList.append (x), myList.append (x + 1), myList.append (x_2) (etc.)

Quiero poder escribir lo mismo que

myList.append (ESTA POSICIÓN -> números entre Y -> POSICIÓN FINAL)

Si no está lo suficientemente claro, lo siento y escribiré un código espagueti hasta que lo descubra

0
helloworldnoob 22 ene. 2021 a las 12:15

1 respuesta

La mejor respuesta

IIUC:

a = []
g = lambda x,y: list(range(x,x+y))
a.append(g(7,4))
a.append(g(11,4))

a:

[[7, 8, 9, 10], [11, 12, 13, 14]]

Si comprendo correctamente su condición n filas consecutivas donde el valor aumenta (x1<x2<x3<x4)

Esta solución ayudará a:

https://stackoverflow.com/a/65090526/6660373

Necesita modificar según sus requisitos.

Tomando prestado el código de esa respuesta:

# Is the current "Close" increasing or same (compared with previous row)
df['incr'] = df.Close >= df.Close.shift(fill_value=0)
# Generate the result column
df['DaysDecr'] = df.groupby(df.incr.cumsum()).apply(
    lambda grp: (~grp.incr).cumsum()).reset_index(level=0, drop=True)
df.drop(columns='incr', inplace=True)

N=3
idx = df.loc[(df['DaysDecr'].rolling(window=N , min_periods=N)\
                          .apply(lambda x: (x==0).all()).eq(1))].index
f = lambda x: list(range(x-N+1,x+1))
for i in idx:
    print(f(i)) # <--------- here is your indices where the condition is satisfied

[0, 1, 2]

df:

    Date        Close       incr    DaysDecr
0   2015-11-27  105.449997  True    0
1   2015-11-30  106.239998  True    0
2   2015-12-01  107.120003  True    0
3   2015-12-02  106.070000  False   1
4   2015-12-03  104.379997  False   2
5   2020-11-18  271.970001  True    0
6   2020-11-19  272.940002  True    0
7   2020-11-20  269.700012  False   1
8   2020-11-23  268.429993  False   2
9   2020-11-24  276.920013  True    0
1
Pygirl 22 ene. 2021 a las 10:36