Python(合并)创建品牌选择/购买数据集

Python(合并)创建品牌选择/购买数据集,python,pandas,merge,data-cleaning,Python,Pandas,Merge,Data Cleaning,我试图从多个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

我试图从多个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上执行此操作吗?

您可以尝试:

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()

非常感谢。谢谢。