gpt4 book ai didi

python - 在 Pandas 中基于条件分配值的有效方法?

转载 作者:行者123 更新时间:2023-12-04 08:44:56 24 4
gpt4 key购买 nike

目标是为列 EXPECTED T 赋值.要分配的值是 C1 S + C2 B如果有 EM在栏目C2 B , 否则值为 C2 B 处的值的图像.
为了实现目标,建议使用以下代码

data = {'C1 S': ['AB','AB','CD','CD','CD'],
'C2 B': ['EM','EM','EM','F','F'],
'EXPECTED_OUTPUT': ['AB EM','EB EM', 'CD EM','F','F']}
df = pd.DataFrame(data)
df['EXPECTED T']=df['C1 S']+' '+ df['C2 B']
mask = df ['C2 B'].str.contains ( r'EM', na=True )
df.loc [~mask, 'EXPECTED T'] = df.loc [~mask, 'C2 B']
但是,我想知道是否有比上面的代码更多的 Pythonic 实现类似的结果?

最佳答案

使用 numpy.where Series.mask , 也可以在这里使用 Series.str.cat :

mask = df['C2 B'].str.contains ( r'EM', na=True )
df['EXPECTED T'] = np.where(mask, df['C1 S']+' '+ df['C2 B'], df['C2 B'])
#alternative
df['EXPECTED T'] = np.where(mask, df['C1 S'].str.cat( df['C2 B'], sep=' '), df['C2 B'])
print (df)
C1 S C2 B EXPECTED_OUTPUT EXPECTED T
0 AB EM AB EM AB EM
1 AB EM EB EM AB EM
2 CD EM CD EM CD EM
3 CD F F F
4 CD F F F
或者:
mask = df['C2 B'].str.contains ( r'EM', na=True )
df['EXPECTED T'] = df['C2 B'].mask(mask, df['C1 S']+' '+ df['C2 B'])

关于python - 在 Pandas 中基于条件分配值的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64369743/

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