gpt4 book ai didi

python - Pandas 以不同于循环的方式修改列

转载 作者:太空宇宙 更新时间:2023-11-03 23:55:32 24 4
gpt4 key购买 nike

我有一个 df:

DF
name1 name2 finalName
AB123 BB123 0
BB113 AB113 0
AB343 AB343 0
CC263 BB263 0
ED633 DD633 0

我需要这样修改 finalName:如果 name1 以 AB 开头,name2 以 BB 开头 - finalName 应该是 BB+number 所以在第一种情况下:BB123.

如果 name1 以 BB 开头,name2 以 AB 开头 - finalName 应该是 AB+number 所以在第二种情况下:AB123

在其余示例中,finalName 应保持为 0。

我写了这段代码:

for row in range(len(DF)):
if(DF.name1.loc[row][0:2] == 'AB' and DF.name2.loc[row][0:2] == 'BB'):
DF.finalName[row] = DF.name1[row].replace('AB','BB',1)
if(DF.name1.loc[row][0:2] == 'BB' and DF.name2.loc[row][0:2] == 'AB'):
DF.finalName[row] = DF.name1[row].replace('BB','AB',1)

我得到了一个 Key error 因为我缺少索引 (...69,70,72..)。所以我找到了我需要重新索引我的 df 的信息。我做到了,它工作正常。但我也发现了一个信息,我不应该循环我的 DF。所以我的问题是:

我怎样才能用 Pandas 的方式做到这一点?我的意思是没有循环?

附言。最终的 df 应该看起来是这样的:

DF
name1 name2 finalName
AB123 BB123 BB123
BB113 AB113 AB113
AB343 AB343 0
CC263 BB263 0
ED633 DD633 0

最佳答案

这是使用 series.str.startswith() 的一种方法:

c1=df.name1.str.startswith('AB')&df.name2.str.startswith('BB')
c2=df.name1.str.startswith('BB')&df.name2.str.startswith('AB')

df['finalName']=np.where(c1|c2,df.name2,df.finalName)
print(df)

   name1  name2 finalName
0 AB123 BB123 BB123
1 BB113 AB113 AB113
2 AB343 AB343 0
3 CC263 BB263 0
4 ED633 DD633 0

关于python - Pandas 以不同于循环的方式修改列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57820155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com