Рассмотрите возможность использования OrderedDict
здесь, чтобы отбросить дубликаты и сохранить порядок очень эффективно.
from collections import OrderedDict as o
df['Desired'] = [
'--'.join(o.fromkeys(x.split('--'), 1))
for x in df['Practice Column']]
df
Practice Column Desired
0 xxx--xxx--xxx--yyy xxx--yyy
1 aaa--bbb--aaa--ccc aaa--bbb--ccc
2 xxx--axa--axa--ccc xxx--axa--ccc
3 bbb--bab--bbb--bab--tgh bbb--bab--tgh
Производительность
df_ = df
df = pd.concat([df] * 1000, ignore_index=True)
%%timeit
df['des'] = [
'--'.join(sorted(set(x.split('--')),key=x.index))
for x in df['Practice Column']]
%%timeit
df['des'] = [
'--'.join(o.fromkeys(x.split('--'), 1))
for x in df['Practice Column']
]
14.6 ms ± 392 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
9.18 ms ± 265 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
Не рассчитано второе решение Джеза, поскольку оно не поддерживает порядок.