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

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

替換最后一個有效項目的值 - 熊貓

替換最后一個有效項目的值 - 熊貓

Cats萌萌 2022-07-26 15:49:46
pandas我想根據df中的另一列替換列中的值。具體來說,在 where col B == X,我想更改 中的值,但要更改給定序列中col C的最后一個值。X我可以X's在C. 但我只想替換最后一個有效的X. mask最后一個有效值在這里是理想的嗎?X's以隨機順序和分組出現df = pd.DataFrame({       'A' : [1,1,1,1,1,1,1,1],                 'B' : ['X','X','X','D','A','A','X','D'],                     'C' : [1,1,1,1,1,1,1,1],                    })df.loc[df['B'] == 'X', ['C']] = 'str'mask = df['B'] == 'X'預期輸出:   A  B    C0  1  X    11  1  X    12  1  X  str3  1  D    14  1  A    15  1  A    16  1  X  str7  1  D    1
查看完整描述

2 回答

?
縹緲止盈

TA貢獻2041條經驗 獲得超4個贊

您可以shift與numpy.where


import numpy as np


b1 = df["B"].shift(-1) 

df["C"] = np.where((df["B"]=="X") & (b1!="X"), "str" , df["C"])

輸出:


    A   B   C

0   1   X   1

1   1   X   1

2   1   X   str

3   1   D   1

4   1   A   1

5   1   A   1

6   1   X   str

7   1   D   1


查看完整回答
反對 回復 2022-07-26
?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

mask = (df['B'] == 'X').astype(int)

mask = mask - mask.shift(-1)

df.loc[mask == 1, 'C'] = 'str'

df

Out[44]: 

   A  B    C

0  1  X    1

1  1  X    1

2  1  X  str

3  1  D    1

4  1  A    1

5  1  A    1

6  1  X  str

7  1  D    1

解釋:


df = pd.DataFrame({   

    'A' : [1,1,1,1,1,1,1,1],             

    'B' : ['X','X','X','D','A','A','X','D'],                 

    'C' : [1,1,1,1,1,1,1,1],                

    })

df

Out[35]: 

   A  B  C

0  1  X  1

1  1  X  1

2  1  X  1

3  1  D  1

4  1  A  1

5  1  A  1

6  1  X  1

7  1  D  1

現在你可以有一個面具,其中df['B']=='X':


df['mask'] = (df['B'] == 'X').astype(int)

df

Out[37]: 

   A  B  C  mask

0  1  X  1     1

1  1  X  1     1

2  1  X  1     1

3  1  D  1     0

4  1  A  1     0

5  1  A  1     0

6  1  X  1     1

7  1  D  1     0

為了找到要替換的行,您可以執行以下操作:


df['mask'] = df['mask'] - df['mask'].shift(-1)

df

Out[39]: 

   A  B  C  mask

0  1  X  1   0.0

1  1  X  1   0.0

2  1  X  1   1.0

3  1  D  1   0.0

4  1  A  1   0.0

5  1  A  1  -1.0

6  1  X  1   1.0

7  1  D  1   NaN

最后:


df.loc[df['mask'] == 1, 'C'] = 'str' 

df

Out[41]: 

   A  B    C  mask

0  1  X    1   0.0

1  1  X    1   0.0

2  1  X  str   1.0

3  1  D    1   0.0

4  1  A    1   0.0

5  1  A    1  -1.0

6  1  X  str   1.0

7  1  D    1   NaN


查看完整回答
反對 回復 2022-07-26
  • 2 回答
  • 0 關注
  • 78 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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