Используйте na_rep=''
, поэтому объединения с отсутствующими значениями не приводят к NaN
для всей строки. Затем strip
любые лишние разделители, которые были объединены из-за пропущенных данных (при условии, что символы разделителя также не начинаются и не заканчиваются ни одним из ваших слов).
import pandas as pd
df = pd.DataFrame({'column1': ['hello', None, 'hello'],
'column2': [None, 'goodbye', 'goodbye']})
sep = ', '
df['column3'] = (df['column1'].str.cat(df['column2'], sep=sep, na_rep='')
.str.strip(sep))
print(df)
column1 column2 column3
0 hello None hello
1 None goodbye goodbye
2 hello goodbye hello, goodbye
Во многих столбцах, где в середине могут быть полосы пропущенных данных, вышеприведенное не помогает удалить лишние разделители. Вместо этого вы можете использовать медленный lambda
вдоль строк. Мы соединяем все значения после сброса нулей:
df['column3'] = df.apply(lambda row: ', '.join(row.dropna()), axis=1)