亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 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 關注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號