使用 Pandas groupby 时,当满足列值时如何开始下一组?

我有一个 DataFrame,其中有一列名为“Current_Position”...我想在“Current_Position”的值等于 0 时将 Dataframe 分成几组...我希望 0 出现的行是当前组的最后一行。下一行将开始下一组。我该如何实现这个目标?


    Current_Position

0   2

1   4

2   2

3   0

4   2

5   0

6   2

7   0

8   1

9   2

10  0

11  2

12  1

13  0

14  1

15  2

16  1

17  0

18  1

19  0

预期输出:


    Current_Position  Group

0                  2      0

1                  4      0

2                  2      0

3                  0      0

4                  2      1

5                  0      1

6                  2      2

7                  0      2

8                  1      3

9                  2      3

10                 0      3

11                 2      4

12                 1      4

13                 0      4

14                 1      5

15                 2      5

16                 1      5

17                 0      5

18                 1      6

19                 0      6


HUH函数
浏览 61回答 1
1回答

子衿沉夜

您可以使用布尔索引来返回TrueorFalse一行是否等于零。要使其成为一组中的最后一个,请使用.shift()移动一行。然后,使用.cumsum(), 来获取组:df['Group'] = (df['Current_Position'].shift() == 0).cumsum()dfOut[1]:     Current_Position  Group0                  2      01                  4      02                  2      03                  0      04                  2      15                  0      16                  2      27                  0      28                  1      39                  2      310                 0      311                 2      412                 1      413                 0      414                 1      515                 2      516                 1      517                 0      518                 1      619                 0      6我们曾经.shift()将数据向下移动一行。这允许具有值的行0成为组的最后一行而不是第一行。我们曾经用来== 0转换为返回orGroup的布尔数据类型。布尔系列中的值本质上相当于or ,因此您可以在其上进行其他数学运算。例如,如果我们创建一个数据类型为“df['Group'] = np.where(df['Current Position'] ==”的返回或STRINGS的列,则您将无法执行这些数学运算0、“真”、“假”)。TrueFalse10.cumsum()sumobject'True''False'下面将逻辑分解为三个步骤,因此可以很容易地可视化:df['Group1'] = df['Current_Position'].shift()df['Group2'] = (df['Group1'] == 0)df['Group3'] = df['Group2'] .cumsum()dfOut[2]:     Current_Position  Group1  Group2  Group30                  2     NaN   False       01                  4     2.0   False       02                  2     4.0   False       03                  0     2.0   False       04                  2     0.0    True       15                  0     2.0   False       16                  2     0.0    True       27                  0     2.0   False       28                  1     0.0    True       39                  2     1.0   False       310                 0     2.0   False       311                 2     0.0    True       412                 1     2.0   False       413                 0     1.0   False       414                 1     0.0    True       515                 2     1.0   False       516                 1     2.0   False       517                 0     1.0   False       518                 1     0.0    True       619                 0     1.0   False       6
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python