第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

pandas:在 pandas 中復(fù)制 Excel 公式

pandas:在 pandas 中復(fù)制 Excel 公式

PHP
三國(guó)紛爭(zhēng) 2023-11-09 20:14:10
我擁有的是一個(gè)像這樣的數(shù)據(jù)框:   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沒有更改但發(fā)生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 工作表中執(zhí)行此操作,首先在 的第一列中手動(dòng)寫入 1 pos,然后在 的第二個(gè)單元格中寫入公式pos:=IF(A3<>A2,1,IF(B3=B2,C2,C2+1))
查看完整描述

1 回答

?
躍然一笑

TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個(gè)贊

說明:


繼續(xù)groupby將pid相同的內(nèi)容分為pid不同的組。在每個(gè)組上,應(yīng)用以下操作:


_ 召集diff各組。diff返回整數(shù)或NaN指示 2 個(gè)連續(xù)行之間的差異。每組的第一行沒有前一行,因此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。每組的第一個(gè)總是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


查看完整回答
反對(duì) 回復(fù) 2023-11-09
  • 1 回答
  • 0 關(guān)注
  • 216 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)