Сначала используйте Series.append
или concat
с rename
для нового Series
, а затем добавьте к исходному с помощью DataFrame.join
или concat
:
s = df['col1'].append(df['col2'], ignore_index=True).rename('col4')
#alternative
#s = pd.concat([df['col1'], df['col2']], ignore_index=True).rename('col4')
df1 = df.join(s, how='outer')
#alternative
#df1 = pd.concat([df, s], axis=1)
print (df1)
col1 col2 col3 col4
0 1.0 4.0 1.0 1
1 2.0 5.0 2.0 2
2 3.0 6.0 3.0 3
3 NaN NaN NaN 4
4 NaN NaN NaN 5
5 NaN NaN NaN 6
Последнее, чтобы избежать преобразования в числа с плавающей запятой, можно использовать:
df1 = df1.astype('Int64')
print (df1)
col1 col2 col3 col4
0 1 4 1 1
1 2 5 2 2
2 3 6 3 3
3 <NA> <NA> <NA> 4
4 <NA> <NA> <NA> 5
5 <NA> <NA> <NA> 6
Или преобразовать отсутствующие значения в пустые строки (что должно быть проблемой, если потребуется обработка df позже каким-либо методом numeri c) :
df1 = df1.fillna('')
print (df1)
col1 col2 col3 col4
0 1 4 1 1
1 2 5 2 2
2 3 6 3 3
3 4
4 5
5 6
РЕДАКТИРОВАТЬ:
df = df.reset_index(drop=True)
s1 = df['full_name'].append(df['alt_name'], ignore_index=True).rename('combined_names')
s2 = df['full_address'].append(df['alt_add'], ignore_index=True).rename('combined_address')
df1 = pd.concat([df, s1, s2], axis=1)