如何根据周期性和连续列对数据帧重新编号?

原始数据框df是:


     type month

0       a     1

1       b     1

2       c     1

3       e     5

4       a     5

5       c     5

6       b     9

7       e     9

8       a     9

9       e     9

10      a     1

11      a     1

请注意, 被month安排在连续的段中并定期重复。段的大小并不总是相同的。我想num为每个连续的月份添加一列,再次从 0 重新编号。不应更改原始序列的顺序。预期的输出应该是:


     type month num

0       a     1   0

1       b     1   1

2       c     1   2

3       e     5   0

4       a     5   1

5       c     5   2

6       b     9   0

7       e     9   1

8       a     9   2

9       e     9   3

10      a     1   0

11      a     1   1

我不能使用groupby,因为 的值month重复但分开。


繁星淼淼
浏览 96回答 1
1回答

摇曳的蔷薇

首先,我们创建groupswith 检查下一行是否等于上一行 withSeries.shift然后是cumsum布尔值。然后我们对组进行分组并使用cumcountgrps = df['month'].ne(df['month'].shift()).cumsum()df['num'] = df.groupby(grps).cumcount()   type  month  num0     a      1    01     b      1    12     c      1    23     e      5    04     a      5    15     c      5    26     b      9    07     e      9    18     a      9    29     e      9    310    a      1    011    a      1    1
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python