Объединение столбцов для создания нового столбца и добавление запятых, если в них нет запятых

#python #dataframe

Вопрос:

У меня есть фрейм данных, подобный этому:

 name:  othercol:  col1:  col2:  col3: other_col:
aa         100     cc      a,     NaN      42
bb         100     a,      NaN    a,     100
 

Я хочу соединить все столбцы вместе (col1, col2, col3), разделенные запятыми. Если только у них уже нет запятой, а я не хочу запятую в конце.

Ожидаемые результаты:

 name: othercol:   col1:  col2:  col3:  other_col:  output:
aa       100       cc     a,      NaN      42        cc, a
bb       100       a,    NaN      a,     100         a, a
 

Я пробовал использовать этот метод:

 listy = ['col1', 'col2', 'col3', ']
df['output'] = df[listy].apply(lambda i: ', '.join(i[i.notnull()]) if str(i[:-1]) != ',' else ' '.join(i[i.notnull()]), axis = 1)

 

Но я получаю повторяющиеся запятые:

 name: othercol:   col1:  col2:  col3:  other_col:  output:
aa       100       cc     a,      NaN      42        cc, a
bb       100       a,    NaN      a,     100         a,, a
 

Ответ №1:

Добавьте это в свою строку кода, и это должно дать вам желаемый результат:

 df['output']=df['output'].str.replace(',,',', ')