consider i have a data frame
| ID | Column B |
|---|---|
| 10 | item 1 |
| 10 | item 1 |
| 10 | item 1 |
| 9 | item 2 |
| 8 | item 3 |
| 8 | item 3 |
| 8 | item 3 |
| 8 | item 3 |
| 7 | item 4 |
| 6 | item 5 |
| 4 | item 6 |
| 4 | item 6 |
| 5 | item 7 |
| 5 | item 7 |
and i want to update a new column as result if the id column is in decreasing order i want something like this
| ID | Column B | result |
|---|---|---|
| 10 | item 1 | 1 |
| 10 | item 1 | 1 |
| 10 | item 1 | 1 |
| 9 | item 2 | 1 |
| 8 | item 3 | 1 |
| 8 | item 3 | 1 |
| 8 | item 3 | 1 |
| 8 | item 3 | 1 |
| 7 | item 4 | 1 |
| 6 | item 5 | 1 |
| 4 | item 6 | 2 |
| 4 | item 6 | 2 |
| 5 | item 7 | 2 |
| 5 | item 7 | 2 |
conditions are i should group the rows which are having the id columns with decreasing only by one value
i tried doing using the code df["result"] = (df["X2"] > df["X2"].shift(1)).cumsum()
CodePudding user response:
You can use diff to compare the successive values, if >-1, this means we start a new group, with help of cumsum:
df['result'] = df['ID'].diff().lt(-1).cumsum().add(1)
Output:
ID Column B result
0 10 item 1 1
1 10 item 1 1
2 10 item 1 1
3 9 item 2 1
4 8 item 3 1
5 8 item 3 1
6 8 item 3 1
7 8 item 3 1
8 7 item 4 1
9 6 item 5 1
10 4 item 6 2
11 4 item 6 2
12 5 item 7 2
13 5 item 7 2
