Załóżmy, że mam następującą ramkę danych:

df = pd.DataFrame({'col1': ['abc', 'defg', 'hwer', 'qwerty'], 'col2': ['123', '456', '890', '90'],
                  'col3': ['knlk', 'knl', 'op', 'tui']})

I chcę połączyć ciągi z każdego wiersza określonym znakiem, robię to w ten sposób:

df['col4'] = df['col1'] + '_' + df['col2'] + '_' + df['col3']

Ale muszę ciągle powtarzać '_', czy jest sposób na zrobienie czegoś takiego:

df['col4'] = '_'.join([df['col1'], df['col2'], df['col3']])
3
Bruno Mello 1 kwiecień 2020, 17:57

3 odpowiedzi

Najlepsza odpowiedź

Możesz użyć pandas.DataFrame.stack:

df['col4'] = df.stack().groupby(level=0).apply('_'.join)
df

Wynik:

enter image description here

2
kederrac 1 kwiecień 2020, 15:00

Jest Series.str.cat:

df["col4"] = df[df.columns[0]].str.cat(df[df.columns[1:]], sep="_")
df
#      col1 col2  col3           col4
# 0     abc  123  knlk   abc_123_knlk
# 1    defg  456   knl   defg_456_knl
# 2    hwer  890    op    hwer_890_op
# 3  qwerty   90   tui  qwerty_90_tui
1
Alex 1 kwiecień 2020, 15:22
df['new'] = df[['col2', 'col3']].apply(lambda x: '_'.join(x), axis=1)
2
Aven Desta 1 kwiecień 2020, 15:03