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

替换最后一个有效项目的值 - 熊猫

替换最后一个有效项目的值 - 熊猫

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 关注
  • 57 浏览
慕课专栏
更多

添加回答

举报

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