Pandas - 有条件地连接两列
Pandas - conditionally concat two columns
给定一个数据框
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
如果找到 replac
子字符串,如何创建一个新列,将 Instructions
与 ID Replaced
连接起来?
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 = " | ")
我尝试使用布尔掩码,但是前两行 returns False
mask = mani_df['Special Handling Directions'].str.contains('replac')
Out[55]:
0 False
1 False
2 NaN
3 NaN
您可以使用 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
给定一个数据框
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
如果找到 replac
子字符串,如何创建一个新列,将 Instructions
与 ID Replaced
连接起来?
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 = " | ")
我尝试使用布尔掩码,但是前两行 returns False
mask = mani_df['Special Handling Directions'].str.contains('replac')
Out[55]:
0 False
1 False
2 NaN
3 NaN
您可以使用 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