需要一个条件语句来填充基于字符串的列

时间:2019-08-07 15:17:33

标签: python pandas numpy where-clause

如果另一列包含某个字符串,则需要根据该列填充单元格。

我需要根据C中的内容填充B列。 就像C包含“ hello;”一样,则用“ greet”填充B中的相应单元格。然后,如果C包含“再见;”,则用“告别”填充B中的相应单元格。

df1
   A    B       C        D
0  w       hello; Jon    q
1  x       bye; Jon      r
2  y       hello; Jack   s
3  z       bye; Jack     t
df1['B'] = np.where(df1['C'].str.contains('hello;'), 'greet', '')
df1['B'] = np.where(df1['C'].str.contains('bye;'), 'farewell', '')

这有效;但是,下一行代码将覆盖第一行中的“问候”。因此,我不确定如何组合条件,以便它们不会相互覆盖。 我希望最终结果是

df1
   A    B          C          D
0  w  greet     hello; Jon    q
1  x  farewell  bye; Jon      r
2  y  greet     hello; Jack   s
3  z  farewell  bye; Jack     t

2 个答案:

答案 0 :(得分:2)

根据示例,如果您仅要处理二进制选择并且所有值都存在于列中,那么应该没问题:

 df1['B'] = np.where(df1['C'].str.contains('bye;'), 'farewell', 'greet')

来自numpy docs

  

numpy.where(condition [,x,y])

     

根据条件返回从x或y中选择的元素。

如果条件满足,它将返回x,否则将填充y

但是,如果您有多个条件,np.select docs将是您想要的:

conditions = [
    df['C'].str.contains('hello;'),
    df['C'].str.contains('bye;')
]

np.select(conditions, ['greet', 'farewell'])

array(['greet', 'farewell', 'greet', 'farewell'], dtype='<U11')

答案 1 :(得分:1)

尝试使用np.select

m1= df['C'].str.contains('hello;')
m2= df['C'].str.contains('bye;')

df['B'] = np.select(condlist=[m1 , m2], 
                         choicelist=['greet','farewell'])