2 回答
TA贡献1824条经验 获得超5个赞
Series.str.cat
与这里一起使用Series.str.strip
:
a = df['A Title'].str.cat(df['A Surname'], sep=' ', na_rep='').str.strip()
b = df['B Title'].str.cat(df['B Surname'], sep=' ', na_rep='').str.strip()
df['combined string'] = a.str.cat(b, sep=' & ').str.strip(' &')
print (df)
A Surname A Title B Surname B Title combined string
0 Smith Mr Smith Mrs Mr Smith & Mrs Smith
1 Longshore Miss NaN NaN Miss Longshore
2 Jones NaN Nguyen NaN Jones & Nguyen
TA贡献1725条经验 获得超7个赞
找到了一个将函数与 一起应用的解决方案axis=1,允许引用函数中的其他列。
def combined(x):
if x['B Surname'] == '':
if x['A Title'] == '':
return x['A Surname']
else:
return x['A Title'] + ' ' + x['A Surname']
else:
if (x['A Title'] == '') or (x['B Title'] == ''):
return x['A Surname'] + ' & ' + x['B Surname']
else:
return x['A Title'] + ' ' + x['A Surname'] + ' & ' + x['B Title'] + ' ' + x['B Surname']
df = df.fillna('')
df['combined string'] = df.apply(combined, axis=1)
np.nan 值必须转换为空字符串,因为我无法弄清楚如何避免将 np.nans 转换为“nan”字符串或在函数内重新分配列值。
注意df = df.fillna('')适用于整个 df。所有空字符串都可以通过以下方式转换为 nandf = df.replace(r'^\s*$', np.nan, regex=True)
添加回答
举报