Использование numpy.where
:
df['range'] = np.where(df['start'] != df['end'], df['start'] + "-" + df['end'], df['start'])
Аналогичное другое решение:
df['range'] = df['start'] + np.where(df['start'] != df['end'], "-" + df['end'], '')
print (df)
start end range
0 5 5 5
1 4 8 4-8
2 10 19 10-19
3 4 4 4
Решение, если значения не являются строками:
s = df['start'].astype(str)
e = df['end'].astype(str)
df['range'] = np.where(df['start'] != df['end'], s + "-" + e, s)
Похоже другое решение:
df['range'] = s + np.where(df['start'] != df['end'], "-" + e, '')