使用 Python pandas 根据列增量对相同值进行分组

Grouping the same value based on a column increment using Python pandas

我想做的是在特定时间段内使用 python 数据帧对 0 的值进行分组,例如我有:

| Time (seconds) | Value |
|       1        |   0   |
|       2        |   0   |
|       3        |   0   |
|       4        |   1   |
|       5        |   0   |
|       6        |   1   |
|       7        |   1   |
|       8        |   0   |
|       9        |   0   |
|       10       |   0   |
|       11       |   1   |
|       12       |   0   |
|       13       |   0   |

我期望的输出是:

| Time (seconds) | Value | Group |
|       1        |   0   |   1   |
|       2        |   0   |   1   |
|       3        |   0   |   1   |
|       4        |   1   |       |
|       5        |   0   |   2   |
|       6        |   1   |       |
|       7        |   1   |       |
|       8        |   0   |   3   |
|       9        |   0   |   3   |
|       10       |   0   |   3   |
|       11       |   1   |       |
|       12       |   0   |   4   |
|       13       |   0   |   4   |

您可以尝试 cumsum 然后传递给 factorize

s = df.Value.ne(0)

df.loc[df.index[~s],'new'] = s.cumsum()[~s].factorize()[0]+1

您可以使用 shiftcumsum 和掩码检查值何时更改:

s = df['value'].eq(0)
df['group'] = (s&s.ne(s.shift())).cumsum().where(s, 0)

输出:

    time  value  group
0      1      0      1
1      2      0      1
2      3      0      1
3      4      1      0
4      5      0      2
5      6      1      0
6      7      1      0
7      8      0      3
8      9      0      3
9     10      0      3
10    11      1      0
11    12      0      4
12    13      0      4