Skip to content
Advertisement

Pandas – Count repeating values by condition

Dataframe:

 group  val  count???
     a    2         1
     a    2         2
     b    1         1
     a    2         3
     b   -3         1
     b   -3         2
     a   -7         1
     a   -5         2

I have columns “group” and “val” and I don’t know how to write pandas code to get column “count”?

The logic is like this, it should count the number of consecutive values that are on the same side (either positive or negative) grouped by column “group”.

When side changes the counter should be reset to 1 and start counting again.

For example, if within one group we have numbers 1, -1, 1, 1, then the output would be 1, 1, 1, 2, since only last two values are on the same side (positive).

Advertisement

Answer

You can group by group and np.sign(df['val'])

df['count'] = df.groupby(['group', np.sign(df['val'])]).cumcount().add(1)
print(df)

  group  val  count???  count
0     a    2         1      1
1     a    2         2      2
2     b    1         1      1
3     a    2         3      3
4     b   -3         1      1
5     b   -3         2      2
6     a   -7         1      1
7     a   -5         2      2
User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement