Как я понял, вы хотите извлечь две части из каждой ячейки. Например, из ES-NL-10096/1938/X1@hkzydzon.dk/6749 следует извлечь:
- 1938 - число между слешами,
- X1 - строка между вторым слешем и @.
Для этого вы можете выполнить:
df.stack().str.extract(r'/(?P<num>\d+)/(?P<txt>[A-Z\d]+)@')\
.stack().unstack([1, 2])
Вы получите MultiIndex для столбцов:
- верхний уровень - имя столбца «источника»,
- второй уровень - num и txt - 2 извлеченные "части".
Для ваших данных выборки результат:
1: Brandenburg 2: Achon
num txt num txt
0 1938 X1 2066 A2
1 3551 B1 2136 A1
2 2436 A1 3671 Z1
3 4881 X1 3806 C3