Nano Hash - криптовалюты, майнинг, программирование

Python (слияние) создать набор данных о выборе бренда/покупке

Я пытаюсь создать набор данных модели выбора из нескольких CSV (подумайте, покупают ли люди бренд продукта по заданной цене).

Небольшое представление моих данных:

import pandas as pd

d1 = {'Product': [1,1,2,2,3], 'Price': [25, 25, 22, 22,35], 'Buyer ID': ['A','B','C','D','E']}
df1 = pd.DataFrame(d1)  

Где df1 содержит информацию о продуктах, которые покупатель рассматривал для покупки. Обратите внимание, что все три продукта (1, 2 и 3) доступны потребителю, когда он принимает решение о покупке.

d2 = {'Buyer Num': ['A','B','E'], 'Product': [1,1,3,], 'Purchase Decision': ['Yes','Yes','Yes']}
df2 = pd.DataFrame(d2)

df2 содержит информацию о том, какой продукт в итоге купил потребитель. Потребители A, B и E купили продукты 1, 1 и 3 соответственно.

Я попытался объединить два набора данных, используя внешнее и внутреннее соединение. Например:

df3 = df1.merge(df2,left_on='Buyer ID', right_on='Buyer Num', how='outer')

Что я получаю от внешнего соединения:

   Buyer ID  Price  Product_x Buyer Num  Product_y Purchase Decision
     A        25          1         A        1.0               Yes
     B        25          1         B        1.0               Yes
     C        22          2       NaN        NaN               NaN
     D        22          2       NaN        NaN               NaN
     E        35          3         E        3.0               Yes

Однако то, что я оптимально хочу, это что-то вроде этого:

Buyer ID    Price   Product  Purchase Decision
A             25        1      Yes
B             25        1      Yes
C             25        1      No
D             25        1      No
E             25        1      No
A             22        2      No
B             22        2      No
C             22        2      No
D             22        2      No
E             22        2      No
A             35        3      No
B             35        3      No
C             35        3      No
D             35        3      No
E             35        3      Yes

Может ли кто-нибудь сказать мне, как это сделать на Python?


Ответы:


1

Можешь попробовать:

from itertools import product

# Outer merge and drop the unwanted column
df = pd.merge(df1, df2, left_on=['Buyer ID', 'Product'], right_on=['Buyer Num', 'Product'], 
              how='outer').drop('Buyer Num', axis=1)

# Generate cartesian product of 'Buyer ID' & 'Price' after retrieving unique values 
midx = product(df1['Buyer ID'].unique(), df1['Price'].unique())
# Set the earlier columns as index and reindex based on the obtained cartesian product values
d = df.set_index(['Buyer ID', 'Price']).reindex(midx)
# Fill Nans in 'Product' with the finite value in each sub-group of level 1 grouped index
d['Product'].fillna(d.groupby(level='Price')['Product'].transform('first'), inplace=True)
# Fill the remaining Nans with "No"
d.fillna('No').sort_values('Product').reset_index()

введите здесь описание изображения

10.03.2017
  • Очень признателен. Большое спасибо. 10.03.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..