For example I have created this data frame:
import pandas as pd
df = pd.DataFrame({'Cycle': [0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5]})
#Maybe something like this: df['Cycle Type'] = df['Cycle'].rolling(2).apply(lambda x: len(set(x)) != len(x),raw= True).replace({0 : False, 1: True})
I want to count the amount of values and than assign a type of cycle to it. If the cycle has less than 12 rows or more than 100 rows mark it as bad, else mark it as good. I was thinking of using something like that lambda function to check if the value from the row before was the same, but im not sure how to add the count feature to give it the parameters i want.
For reference "0" is all one cycle, "1" is another cycle, etc…
Thanks in advance for any help.
>Solution :
Use a groupby, transform to get size of each cycle and use between to see if the size of each cycle falls between 13, 100 (both inclusive) and mark the True as good and False as bad. Because as per requirement any size that is less than 12 and greater than 100 is bad and everything else that is in between [13, 100] is good.
df['Cycle_Type'] = df.groupby('Cycle')['Cycle'].transform('size').between(13, 100,
inclusive='both').replace({True: 'good', False: 'bad'})
output:
Cycle Cycle_Type
0 0 bad
1 0 bad
2 0 bad
3 0 bad
4 0 bad
.. ... ...
71 5 bad
72 5 bad
73 5 bad
74 5 bad
75 5 bad