В настоящее время у меня есть три фрейма данных: покупки, цвета автомобилей и домашние животные. Пример этих данных может быть сформирован с помощью следующего кода:
import pandas as pd
cols = ['MEMBER', 'CAR_COLOR', 'PET', 'PURCHASE_TYPE', 'ITEM_1', 'ITEM_2', 'ITEM_3', 'ITEM_4']
data1 = [
[1, "", "", "CC", "BALL", "SHIRT", "VIOLIN", "SWEATER"],
[1, "", "", "CC", "CANVAS", "COFFEE", "", ""],
[1, "", "", "CSH", "TOY", "VIDEO_GAME", "GUITAR", ""],
[2, "", "", "CC", "VEST", "BOOK", "EGGS", "BREAD"],
[2, "", "", "CHK", "APPLES", "TOOLS", "", ""]
]
colors = [
[1,"BLUE"],
[1, "RED"],
[2, "BLUE"],
[2, "GREEN"],
[2, "WHITE"]
]
pets = [
[1, 'FISH'],
[2, 'DOG'],
[2, 'CAT'],
[2, 'FISH']
]
df_data = pd.DataFrame(data1, columns=cols)
df_colors = pd.DataFrame(colors, columns=['MEMBER', 'CAR_COLOR'])
df_pets = pd.DataFrame(pets, columns = ['MEMBER', 'PET'])
По сути, я хочу объединить эти фреймы данных так, чтобы каждая уникальная итерация (MEMBER, PURCHASE_TYPE, ITEMS1-4) / CAR_COLOR / PET указан как собственная строка. Первоначально фрейм данных о покупке (data1) имел уникальные попарные значения (MEMBER, PURCHASE_TYPE), но они были урезаны таким образом, что если в паре было более четырех элементов, элементы после элемента 4 стали их собственной новой строкой, как показано на примере строк 1 и 2 данных 1. Конечный фрейм данных должен выглядеть так же, как в этом изображении .
В моей реальной ситуации каждый из трех начальных фреймов данных имеет тысячи строк, поэтому в идеале решение было бы надежным / простым для преобразовать в более крупные наборы данных. Пожалуйста, дайте мне знать, если этой информации недостаточно или у вас возникнут уместные вопросы. Я предполагаю, что решение включает в себя своего рода группировку и слияние, но по какой-то причине мой мозг столкнулся с этой проблемой. Любая помощь не приветствуется!