给出一个数据框
Patient ID Instructions ID Replaced
1 N/A ID123
2 ID124
3 ID125
4 xyz ID126
5 xyz ID127
6 ID128
7 Replacement ID129
8 Replace ID130
9 replaced ID131
10 xyz ID132
我如何创建一个新列,如果找到了Instructions
子字符串,该列将ID Replaced
与replac
连接起来?
Patient ID Instructions ID Replaced Comments
1 N/A ID123
2 ID124
3 ID125
4 xyz ID126
5 xyz ID127
6 ID128
7 Replacement ID129 Replacement | ID129
8 Replace ID130 Replace | ID130
9 Replaced ID131 Replaced | ID131
10 xyz ID132
我尝试了以下操作,但是Comments
列完全为空
mani_df['Comments'] = ""
# if instructions contains 'replac' , concat with ID replaced
if "replace" in df['Instructions']:
df['Comments'] = df['Instructions'].str.cat(df['ID Replaced'], sep = " | ")
并且我尝试使用布尔掩码,但是前两行返回False
mask = mani_df['Special Handling Directions'].str.contains('replac')
Out[55]:
0 False
1 False
2 NaN
3 NaN
答案 0 :(得分:1)
您可以将str.contains
与case=False
一起使用,而只需使用pandas indexing
进行连接
mask = df.Instructions.str.contains('Replace', case=False).fillna(False)
df['Comments'] = df.loc[mask, 'Instructions'] + ' | ' + df['ID Replaced']
当然,您可以在末尾fillna
来获取空字符串(看起来像您的预期输出)
df.fillna('')
收益
Patient ID Instructions ID Replaced Comments
0 1 ID123
1 2 ID124
2 3 ID125
3 4 xyz ID126
4 5 xyz ID127
5 6 ID128
6 7 Replacement ID129 Replacement | ID129
7 8 Replace ID130 Replace | ID130
8 9 replaced ID131 replaced | ID131
9 10 xyz ID132