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

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

pandas:在 pandas 中復制 Excel 公式

pandas:在 pandas 中復制 Excel 公式

PHP
三國紛爭 2023-11-09 20:14:10
我擁有的是一個像這樣的數據框:   total_sum  pid   5          2   1          2   6          7   3          7   1          7   1          7   0          7   5         10   1         10   1         10我想要的是另一列,pos例如:   total_sum  pid    pos   5          2      1   1          2      2    6          7      1   3          7      2   1          7      3   1          7      3   0          7      4   5         10      1   1         10      2   1         10      2背后的邏輯是:posnew 的初始pid值為1。如果pid沒有更改但發生total_sum更改,則 的值pos將增加 1(例如前兩行),否則 的值pos是先前的值(例如最后兩行)。我嘗試過的: df['pos'] = 1 df['pos'] = np.where(((df.pid.diff(-1)) == 0 & (df.total_sum.diff(-1) == 0)),                                                     df.pos, (np.where(df.total_sum.diff(1) < 1, df.pos + 1, df.pos )))目前,我正在 Excel 工作表中執行此操作,首先在 的第一列中手動寫入 1 pos,然后在 的第二個單元格中寫入公式pos:=IF(A3<>A2,1,IF(B3=B2,C2,C2+1))
查看完整描述

1 回答

?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

說明:


繼續groupby將pid相同的內容分為pid不同的組。在每個組上,應用以下操作:


_ 召集diff各組。diff返回整數或NaN指示 2 個連續行之間的差異。每組的第一行沒有前一行,因此diff始終返回NaN每組的第一行:


df.groupby('pid').total_sum.transform(lambda x: x.diff()


Out[120]:

0    NaN

1   -4.0

2    NaN

3   -3.0

4   -2.0

5    0.0

6   -1.0

7    NaN

8   -4.0

9    0.0

Name: total_sum, dtype: float64

_ne檢查是否有任何值不是0。它返回True不0


df.groupby('pid').total_sum.transform(lambda x: x.diff().ne(0))


Out[121]:

0     True

1     True

2     True

3     True

4     True

5    False

6     True

7     True

8     True

9    False

Name: total_sum, dtype: bool

_cumsum是逐行相加的累積和。在 Python 中,True被解釋為1并被False解釋為0。每組的第一個總是True,因此cumsum總是從1每行開始并將其相加以獲得所需的輸出。


df.groupby('pid').total_sum.transform(lambda x: x.diff().ne(0).cumsum())


Out[122]:

0    1

1    2

2    1

3    2

4    3

5    3

6    4

7    1

8    2

9    2

Name: total_sum, dtype: int32

將所有命令鏈接到一行,如下所示:


df['pos'] = df.groupby('pid').total_sum.transform(lambda x: x.diff().ne(0).cumsum())


Out[99]:

   total_sum  pid  pos

0          5    2    1

1          1    2    2

2          6    7    1

3          3    7    2

4          1    7    3

5          1    7    3

6          0    7    4

7          5   10    1

8          1   10    2

9          1   10    2


查看完整回答
反對 回復 2023-11-09
  • 1 回答
  • 0 關注
  • 195 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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