Еще один один вкладыш:
[string for string in string_list if len(filter(lambda x: string in x,string_list)) == 1]
должен быть достаточно читабельным, а не только pythonic.
Просто используйте Transpose:
m=df.transpose()
А затем:
[str(list(a)[0])+'|'+str(list(a)[1]) for a in m.values]
Вы можете сжать имена столбцов и значения из первой строки, чтобы разделить их по конвейеру, а затем соединить полученный список с символом новой строки, чтобы поместить все в отдельную строку.
import pandas as pd
df = pd.DataFrame([{"Type": "XYZ", "ID": 999, "From": "Tony", "To": "Andy"}])
print(
"\n".join(["|".join([col, str(val)]) for col, val in zip(df.columns, df.iloc[0])])
)