In order to achieve this result, you need to iterate over the lists to determine the outputted values.
Start by assigning some base variables:
expected = []
lastTrue = None
count = 0
These will be modified throughout the loop. Next, loop through and test for each condition.
Loop through the numbers:
for i in range(len(A)):
num = A[i]
Test for if the condition is True; if it is, save the number and reset the count:
if COND[i]: # If True, save the number and reset count
lastTrue = num
count = 0
Check for if a True value has been found yet:
elif lastTrue is None: # If haven't found a True value yet, pass
pass
Test the number against the last true number to determine the output:
elif num < lastTrue: # If less than the last True value, increment count
count += 1
else: # If larger than or equal to, reset count
count = 0
lastTrue = None
Add the current count to the list:
expected.append(count)
Now all you need to do is add the column and print the output.
Final code:
import pandas as pd
A=[28,30,15,25,24,13,31,19,20,11,19,21]
COND=[False,True,False,False,False,False,False,False,True,False,False,False]
expected = []
lastTrue = None
count = 0
for i in range(len(A)):
num = A[i]
if COND[i]: # If True, save the number and reset count
lastTrue = num
count = 0
elif lastTrue is None: # If haven't found a True value yet, pass
pass
elif num < lastTrue: # If less than the last True value, increment count
count += 1
else: # If larger than or equal to, reset count
count = 0
lastTrue = None
expected.append(count)
df=pd.DataFrame({'A':A,'COND':COND,'EXPECTED':expected})
print(df)
Output:
A COND EXPECTED
0 28 False 0
1 30 True 0
2 15 False 1
3 25 False 2
4 24 False 3
5 13 False 4
6 31 False 0
7 19 False 0
8 20 True 0
9 11 False 1
10 19 False 2
11 21 False 0