Я хочу переставить Pandas Dataframe для включения дополнительной строки на основе значений в двух (или более) столбцах всякий раз, когда они включают разделитель. Эта дополнительная строка будет иметь все переменные, идентичные оригиналу, за исключением столбцов, в которых ищется разделитель. Если разделитель найден, я бы хотел дополнительную строку со вторыми элементами обоих столбцов (после разделителя). Следующий код работает для одного столбца и хорошо иллюстрирует мои цели:
df = pd.DataFrame([{'var1': 'a,b,c', 'var2': 1}, {'var1': 'd,e,f', 'var2': 2}])
df.assign(var1=df.var1.str.split(',')).explode('var1').reset_index(drop=True)
Хотя при указании двух столбцов для каждого столбца включается несколько строк, как показано в следующем коде:
df = pd.DataFrame([{'var1': 'a,b,c', 'var2': 1, 'var3': 'I, II, III'}, {'var1': 'd,e,f', 'var2': 2, 'var3': 'IV, V, VI'}])
df.assign(var1=df.var1.str.split(','), var2=df.var2.str.split(',')).explode('var1').explode('var2').reset_index(drop=True)
Мне бы хотелось, чтобы во второй элемент обоих столбцов была включена одна строка, например:
df = pd.DataFrame([{'var1': 'a', 'var2': 1, 'var3': 'I'}, {'var1': 'b', 'var2': 1, 'var3': 'II'}, {'var1': 'c', 'var2': 1, 'var3': 'III'}, {'var1': 'd', 'var2': 2, 'var3': 'IV'}, {'var1': 'e', 'var2': 2, 'var3': 'V'}, {'var1': 'f', 'var2': 2, 'var3': 'VI'}])
Я знаю, что разбиение и разрыв в обоих столбцах и последующее поднабор результирующего кадра данных позволили бы мнеполучить желаемый результат, но я искал потенциально более чистый способ сделать это.
Обратите внимание, что для каждой строки оба столбца разделителя всегда будут иметь одинаковое количество разделителей.
edit
Атрибут .explode () доступен только в pandas> = 0.25.x