Python 每次标志更改时递增秩

Python 每次标志更改时递增秩,python,pandas,dataframe,dense-rank,Python,Pandas,Dataframe,Dense Rank,我有以下数据框,其中第一列是datetime索引。我正在尝试实现所需的\u输出列,该列在标志从0更改为1或从1更改为0时递增。我已经能够在SQL中实现这类功能,但是在发现pandasql sqldf由于某种奇怪的原因更改了进行分区的字段的值之后,我现在尝试使用常规python语法来实现这一点 任何帮助都将不胜感激 +-------------+------+----------------+ | date(index) | flag | desired_output | +-----------

我有以下数据框,其中第一列是
datetime
索引。我正在尝试实现
所需的\u输出
列,该列在标志从0更改为1或从1更改为0时递增。我已经能够在SQL中实现这类功能,但是在发现
pandasql sqldf
由于某种奇怪的原因更改了进行
分区的字段的值之后,我现在尝试使用常规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 |
+-------------+------+----------------+

使用
diff
cumsum

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

使用
diff
cumsum

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