Python 熊猫中基于条件赋值的有效方法?

Python 熊猫中基于条件赋值的有效方法?,python,pandas,conditional-statements,Python,Pandas,Conditional Statements,目标是为列预期T分配一个值。如果C2 B列中存在EM,则要分配的值为C1 S+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)

目标是为列
预期T
分配一个值。如果
C2 B
列中存在
EM
,则要分配的值为
C1 S+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方法?

使用,或者,也可以在此处使用:


或:

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'])