如果另一列包含某个字符串,则需要根据该列填充单元格。
我需要根据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
答案 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'])