【发布时间】:2022-12-05 23:49:15
【问题描述】:
根据下面的示例,有两个数据框,我想根据两列(产品和价格)将值分配给第二个数据框。但是,需要强调的是,不同的商店/卖家有相同的产品和价格。
请在下面找到一个简单的例子。
1st df
df = {'Product':['TV', 'iPhone', 'TV'], 'Seller': ['Pankaj', 'John', 'John'] , 'Amount': [15, 10, 20], 'Price' : [2.50, 3.50, 2.5], 'Store': ['Walmart', 'Amazon', 'Amazon']}
2nd df
df2 = {'Product':['TV', 'TV', 'iPhone', 'iPhone', 'TV'], 'Amount': [10, 5, 5, 5, 20], 'Price' : [2.50, 2.5, 3.50, 3.50, 2.5], 'ID':['GLOBAL', 'FLAGSHIP', 'GREEN', 'FLAGSHIP', 'GLOBAL']}
预期结果:
df2 = {'Product':['TV', 'TV', 'iPhone', 'iPhone', 'TV'], 'Amount': [10, 5, 5, 5, 20], 'Price' : [2.50, 2.5, 3.50, 3.50, 2.5], 'ID':['GLOBAL', 'FLAGSHIP', 'GREEN', 'FLAGSHIP', 'GLOBAL'], 'Store': ['Walmart', 'Walmart', 'Amazon', 'Amazon', 'Amazon'], 'Seller': ['Pankaj', 'Pankaj', 'John', 'John', 'John']}
我试图在两个数据框中将数量拆分为一个单元,然后根据列值进行合并。但是,没有按预期工作。我的猜测是结果不正确,因为存在与不止一行匹配的条件。因此,可能的解决方案可能是循环遍历两个具有相同详细信息的匹配列的数据帧,并从原始数据帧中删除匹配的金额。
我尝试了什么:
df= df.loc[df.index.repeat(df['Amount'])].reset_index(drop=True)
df['Amount'] = 1
df2= df2.loc[df2.index.repeat(df2['Amount'])].reset_index(drop=True)
df2['Amount'] = 1
df2 = df2.merge(df, how='left', left_on=['Product', 'Price'])
【问题讨论】: