У меня есть DF, который имеет две колонки: вопросы и ответы. Колонка ответов содержит дубликаты.
Теперь я хотел бы создать новый DF, который имеет три столбца: вопрос1, вопрос2, дубликат.
Столбцы вопрос1 и вопрос2 будут заполняться как каждая уникальная комбинация всех вопросов в исходном DF. Дублирующий столбец будет иметь логическое значение, соответствующее тому, имеют ли вопросы одинаковый ответ в начальном DF.
Начальный DF составляет ~ 13 000 строк, и поэтому результирующий DF будет большим (я полагаю, слишком большой для Pandas на моей машине, но я могу уменьшить начальный DF для тестирования и затем изменить его на что-то, отличное от pandas, если мне нужны все данные).
Есть ли способ это сделать в любом случае быстрее, чем вложенное в O (N ^ 2) l oop, так как это занимает слишком много времени без распараллеливания / векторизации:
questions1, questions2, duplicates = [], [], []
for i in range(len(dataset)-1):
print(f'{i+1} / {len(dataset)-1}')
question1 = dataset.iloc[i]['question']
answer1 = dataset.iloc[i]['answer']
for j in range(i+1, len(dataset)):
question2 = dataset.iloc[j]['question']
answer2 = dataset.iloc[j]['answer']
duplicate = answer1 == answer2
questions1.append(question1)
questions2.append(question2)
duplicates.append(duplicate)
duplicate_dataset = pd.DataFrame({
'question1': questions1,
'question2': questions2,
'duplicate': duplicates
})
РЕДАКТИРОВАТЬ: В соответствии с запросом, вот игрушечный образец ввода DF:
df = pd.DataFrame({
'question': ['abc', 'def', 'ghi', 'jkl', 'mno', 'pqr', 'stu', 'vwx', 'yzz'],
'answer': ['1', '2', '1', '3', '4', '4', '5', '1', '6']
})
И результирующий DF должен быть равен этому:
df2 = pd.DataFrame({
'question1': [
'abc', 'abc', 'abc', 'abc',
'abc', 'abc', 'abc', 'abc',
'def', 'def', 'def', 'def',
'def', 'def', 'def', 'ghi',
'ghi', 'ghi', 'ghi', 'ghi',
'ghi', 'jkl', 'jkl', 'jkl',
'jkl', 'jkl', 'mno', 'mno',
'mno', 'mno', 'pqr', 'pqr',
'pqr', 'stu', 'stu', 'vwx'
],
'question2': [
'def', 'ghi', 'jkl', 'mno',
'pqr', 'stu', 'vwx', 'yzz',
'ghi', 'jkl', 'mno', 'pqr',
'stu', 'vwx', 'yzz', 'jkl',
'mno', 'pqr', 'stu', 'vwx',
'yzz', 'mno', 'pqr', 'stu',
'vwx', 'yzz', 'pqr', 'stu',
'vwx', 'yzz', 'stu', 'vwx',
'yzz', 'vwx', 'yzz', 'yzz'
],
'duplicate': [
False, True, False, False,
False, False, True, False,
False, False, False, False,
False, False, False, False,
False, False, False, True,
False, False, False, False,
False, False, True, False,
False, False, False, False,
False, False, False, False
]
})