Kben59
Kben59

Reputation: 388

Conditionnal Rolling count

Here is my dataframe:

score 
1
62
7
15
167
73
25
24
2
76

I want to compare a score with the previous 4 scores and count the number of scores higher than the current one.

This is my expected output:

score   count 
1
62
7
15
167       0
73        1    (we take 4 previous scores : 167,15,7,62 there is just 167 > 73 so count 1)
25        2    
24        3
2         4
76        0

If somebody has an idea on how to do that, you are welcome

Thanks!

Upvotes: 0

Views: 46

Answers (1)

mabergerx
mabergerx

Reputation: 1213

I do not think your output is according to your question. However, if you do look only at the previous 4 elements, then you could implement the following:

scores = [1, 62, 7, 15, 167, 73, 25, 24, 2, 76]
highers = []

for index, score in enumerate(scores[4:]):
    higher = len([s for s in scores[index:index+4] if score < s])
    print(higher)
    highers.append(higher)

print(highers)
# [0, 1, 2, 3, 4, 0]

Then, you could just add this highers list as a pandas column:

df['output'] = [0]*4 + highers

Note that I pad the output in such way here that I assign zeros to the first four values.

Upvotes: 1

Related Questions