Попробуйте следующий код:
import pandas as pd
# Source data
a = pd.DataFrame([{'var1': 'a;b;c', 'var2': 1,'var3':'apples;mango'},
{'var1': 'd;e;f', 'var2': 2,'var3':'kiwi;pineapple'},
{'var1': 'g;e;a', 'var2': 15,'var3':'pinneapple'},
{'var1': 'm', 'var2': 12,'var3':'orange'}])
# Split var1
a2 = a.var1.apply(lambda t: pd.Series(t.split(';')))\
.merge(a, right_index = True, left_index = True)\
.drop(['var1'], axis = 1)\
.melt(id_vars = ['var2', 'var3'], value_name = 'var1')\
.drop('variable', axis = 1).dropna()
# Split var3
a3 = a2.var3.apply(lambda t: pd.Series(t.split(';')))\
.merge(a2, right_index = True, left_index = True)\
.drop(['var3'], axis = 1)\
.melt(id_vars = ['var1', 'var2'], value_name = 'var3')\
.drop('variable', axis = 1).dropna()
# Sort the result
a3.sort_values(['var2', 'var3'])
a2
содержит таблицу с var1
, разделенным на отдельные строки.
Та же операция для var3
выполняет следующую инструкцию (аналогично предыдущему с измененными именами.
Последний шаг - сортировка результата.
Чтобы понять, как работает этот код, выполните отдельно каждый шаг одной из связанных инструкций.
Если у вас есть несколько столбцов, которые нужно разделить, добавьте для них аналогичные инструкции по разделению.