为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUH函数 2023-09-19 17:17:26
我有一个 DataFrame,其中有一列名为“Current_Position”...我想在“Current_Position”的值等于 0 时将 Dataframe 分成几组...我希望 0 出现的行是当前组的最后一行。下一行将开始下一组。我该如何实现这个目标?    Current_Position0   21   42   23   04   25   06   27   08   19   210  011  212  113  014  115  216  117  018  119  0预期输出:    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
查看完整描述

1 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

您可以使用布尔索引来返回TrueorFalse一行是否等于零。要使其成为一组中的最后一个,请使用.shift()移动一行。然后,使用.cumsum(), 来获取组:


df['Group'] = (df['Current_Position'].shift() == 0).cumsum()

df

Out[1]: 

    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

  1. 我们曾经.shift()将数据向下移动一行。这允许具有值的行0成为组的最后一行而不是第一行。

  2. 我们曾经用来== 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()

df

Out[2]: 

    Current_Position  Group1  Group2  Group3

0                  2     NaN   False       0

1                  4     2.0   False       0

2                  2     4.0   False       0

3                  0     2.0   False       0

4                  2     0.0    True       1

5                  0     2.0   False       1

6                  2     0.0    True       2

7                  0     2.0   False       2

8                  1     0.0    True       3

9                  2     1.0   False       3

10                 0     2.0   False       3

11                 2     0.0    True       4

12                 1     2.0   False       4

13                 0     1.0   False       4

14                 1     0.0    True       5

15                 2     1.0   False       5

16                 1     2.0   False       5

17                 0     1.0   False       5

18                 1     0.0    True       6

19                 0     1.0   False       6


查看完整回答
反对 回复 2023-09-19
  • 1 回答
  • 0 关注
  • 60 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信