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