每次标志更改时增加排名

Increment rank each time flag changes

我有以下 pandas 数据框,其中第一列是 datetime 索引。我正在尝试实现 desired_output 列,该列每次​​标志从 0 变为 1 或 1 变为 0 时都会递增。我已经能够在 SQL 中实现这种类型的东西,但是在发现 pandasql sqldf 出于某种奇怪的原因更改了字段的值 partition 我现在正在尝试使用常规 python 语法来实现此目的。

如有任何帮助,我们将不胜感激。

+-------------+------+----------------+
| date(index) | flag | desired_output |
+-------------+------+----------------+
| 1/01/2020   |    0 |              1 |
| 2/01/2020   |    0 |              1 |
| 3/01/2020   |    0 |              1 |
| 4/01/2020   |    1 |              2 |
| 5/01/2020   |    1 |              2 |
| 6/01/2020   |    0 |              3 |
| 7/01/2020   |    1 |              4 |
| 8/01/2020   |    1 |              4 |
| 9/01/2020   |    1 |              4 |
| 10/01/2020  |    1 |              4 |
| 11/01/2020  |    1 |              4 |
| 12/01/2020  |    1 |              4 |
| 13/01/2020  |    0 |              5 |
| 14/01/2020  |    0 |              5 |
| 15/01/2020  |    0 |              5 |
| 16/01/2020  |    0 |              5 |
| 17/01/2020  |    1 |              6 |
| 18/01/2020  |    0 |              7 |
| 19/01/2020  |    0 |              7 |
| 20/01/2020  |    0 |              7 |
| 21/01/2020  |    0 |              7 |
| 22/01/2020  |    1 |              8 |
| 23/01/2020  |    1 |              8 |
+-------------+------+----------------+

使用diffcumsum:

print (df["flag"].diff().ne(0).cumsum())


0     1
1     1
2     1
3     2
4     2
5     3
6     4
7     4
8     4
9     4
10    4
11    4
12    5
13    5
14    5
15    5
16    6
17    7
18    7
19    7
20    7
21    8
22    8