Home > Net >  increase or decrease according to status with pandas
increase or decrease according to status with pandas

Time:02-26

How can I reach the 'Counter' column with pandas: If status A -> count up by one. if status B or C -> reduce by one.

Index Status Counter
1 A 1
2 A 2
3 A 3
4 B 2
5 C 1
6 A 2
7 B 1
8 A 2
9 A 3
10 B 2

CodePudding user response:

Map the values to 1/-1 with numpy.where, then perform a cumsum:

import numpy as np

df['Counter'] = (np.where(df['Status'].eq('A'), 1, -1)
                   .cumsum()
                 )

Output:

   Index Status  Counter
0      1      A        1
1      2      A        2
2      3      A        3
3      4      B        2
4      5      C        1
5      6      A        2
6      7      B        1
7      8      A        2
8      9      A        3
9     10      B        2

CodePudding user response:

I think what you need is a loop over the dataframe's rows. You can achieve this by using iterrows on the dataframe:

count = 0
CounterList = []
for i, row in df.iterrows():
  if row["Status"] == "A":
    count  = 1
  elif row["Status"] == "B" or row["Status"] == "C":
    count -= 1
  CounterList.append(count)
df["Counter"] = CounterList
df

Output

Index Status Counter
0 1 A 1
1 2 A 2
2 3 A 3
3 4 B 2
4 5 C 1
5 6 A 2
6 7 B 1
7 8 A 2
8 9 A 3
9 10 B 2

CodePudding user response:

Use:

df = pd.DataFrame({'status':['A', 'A', 'B', 'A']})
temp = df['status']=='A'
df['counter'] = temp.replace(False, -1).astype(int).cumsum()

Input:

enter image description here

Output:

enter image description here

  • Related