Наиболее общим решением является преобразование всех значений в строки, используйте join
и последнее replace
:
df['new'] = df.astype(str).apply('_'.join, axis=1).str.replace(' ', '_')
Если необходимо отфильтровать только некоторые столбцы:
cols = ['Category','Event','Cost']
df['new'] = df[cols].astype(str).apply('_'.join, axis=1).str.replace(' ', '_')
Илиобработка каждого столбца отдельно - при необходимости replace
, а также преобразование числового столбца в строки:
df['new'] = (df['Category'] + '_' +
df['Event'].str.replace(' ', '_') + '_' +
df['Cost'].astype(str))
Или после преобразования в строки добавьте _
, sum
, но необходимо после замены удалить талинг _
rstrip
:
df['new'] = df.astype(str).add('_').sum(axis=1).str.replace(' ', '_').str.rstrip('_')
print(df)
Category Event Cost new
0 A Music Theater 10000 A_Music_Theater_10000
1 B Poetry Music 5000 B_Poetry_Music_5000
2 C Theatre Comedy 15000 C_Theatre_Comedy_15000
3 D Comedy Theatre 2000 D_Comedy_Theatre_2000