Со следующим примером кадра данных:
df = pd.DataFrame({'fname': ['joe', 'john smith', 'jane@jane.com', 'jacky /jax', 'a@a.com', 'john (jack)', 'Bob J. Smith'],
'lname': ['smith', '', '', 'jack', 'non', 'smith', '']})
Вы можете использовать np.where()
:
conditions = (df['lname']=='') & (df['fname'].str.split().str.len()>1)
df['lname'] = np.where(conditions, df['fname'].str.split().str[-1].str.lower(), df['lname'])
Выход:
fname lname
0 joe smith
1 john smith smith
2 jane@jane.com
3 jacky /jax jack
4 a@a.com non
5 john (jack) smith
6 Bob J. Smith smith
Для удаления последней строкииз столбца fname
строк, в которых был заполнен столбец lname
:
df['fname'] = np.where(conditions, df['fname'].str.split().str[:-1].str.join(' '), df['fname'])
Выход:
fname lname
0 joe smith
1 john smith
2 jane@jane.com
3 jacky /jax jack
4 a@a.com non
5 john (jack) smith
6 Bob J. smith