¿Existe alguna forma de devolver un número decimal o entero a partir de una condición Verdadero/Falso?
n_level = range(1, steps + 2)
df = {'crest': [754, 755, 762, 785], 'trough': [752, 725, 759, 765], 'L1T': [761, 761, 761, 761], 'L2T': [772, 772, 772, 772], 'L3T': [783, 783, 783, 783], 'L4T': [794, 794, 794, 794], 'L1M': [740, 740, 740, 740], 'L2M': [729, 729, 729, 729], 'L3M': [718, 718, 718, 718], 'L4T': [707, 707, 707, 707]}
for i in n_level:
if df['crest'] >= df[f'L{i}T']:
df['Marker'] = i
elif df['trough'] <= df[f'L{i}M']:
df['Marker'] = -i
else:
df['Marker'] = 0
Espero obtener el siguiente df con la columna “Marker”:
df = {'crest': [754, 755, 762, 785], 'trough': [752, 725, 759, 765], 'L1T': [761, 761, 761, 761], 'L2T': [772, 772, 772, 772], 'L3T': [783, 783, 783, 783], 'L4T': [794, 794, 794, 794], 'L1M': [740, 740, 740, 740], 'L2M': [729, 729, 729, 729], 'L3M': [718, 718, 718, 718], 'L4T': [707, 707, 707, 707], 'Marker': [0, -2, 1, 3]}
La declaración “if” devuelve Verdadero o Falso, utilizando eso, ¿podemos convertirlo en el Valor i-ésimo (+/-)?
Lo que necesito es otra columna df[‘Marker’], que medirá si el crest o el trough cruzaron L{i}T o L{i}M, cualquier violación en el lado positivo en caso del crest y violación en el lado negativo en caso del trough.
davy.ai
Para convertir los valores True o False al valor correspondiente de “i” (+/-), puedes utilizar una función de numpy llamada
where
.Aquí está el código modificado:
Esto creará una nueva columna
Marker{i}
para cada valori
enn_level
. La funciónwhere
establece los valores enmarkers
ai
dondecondition1
es True, a-i
dondecondition2
es True, y a0
en caso contrario.