2 回答

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊
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貢獻(xiàn)1725條經(jīng)驗(yàn) 獲得超8個(gè)贊
找到了一個(gè)將函數(shù)與 一起應(yīng)用的解決方案axis=1,允許引用函數(shù)中的其他列。
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 值必須轉(zhuǎn)換為空字符串,因?yàn)槲覠o法弄清楚如何避免將 np.nans 轉(zhuǎn)換為“nan”字符串或在函數(shù)內(nèi)重新分配列值。
注意df = df.fillna('')適用于整個(gè) df。所有空字符串都可以通過以下方式轉(zhuǎn)換為 nandf = df.replace(r'^\s*$', np.nan, regex=True)
添加回答
舉報(bào)