Python(合并)创建品牌选择/购买数据集
我试图从多个csv创建一个选择模型数据集(想想个人是否以给定的价格购买某个品牌的产品) 我的数据的一个小表示: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
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()
非常感谢。谢谢。