繁体   English   中英

根据其他列在新列中分配值(多个匹配与合并)

[英]Assign values in a new column based on other columns (multiple matches with merge)

根据下面的示例,有两个数据框,我想根据两列(产品和价格)为第二个 dataframe 分配值。 但是,需要强调的是,不同的商店/卖家有相同的产品和价格。

请在下面找到一个简单的例子。

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']}
df = pd.DataFrame(df)

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 = pd.DataFrame(df2)

预期结果:

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']}

我试图在两个数据框中将数量拆分为一个单元,然后根据列值进行合并。 但是,没有按预期工作。 我的猜测是结果不正确,因为存在与不止一行匹配的条件。 因此,可能的解决方案可能是遍历具有相同详细信息的两个数据帧匹配列,并从原始 dataframe 中删除匹配的金额。

我尝试了什么:

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'])

您正在尝试合并数据框,但您的 df1 和 df2 仍然是字典。 首先将它们转换为数据帧。

import pandas as pd

df = pd.DataFrame(df)
df2 = pd.DataFrame(df2)

然后,您可以在第一个 dataframe 上删除列,并且不要忘记在第二个 dataframe 中包含要合并的列

df.drop(columns=['Amount', 'Price'])
df3 = df2.merge(df, how='left', left_on=['Product','Price'],right_on=['Product','Price'])
df3

  Product  Amount_x  Price        ID  Seller  Amount_y    Store
0      TV        10    2.5    GLOBAL  Pankaj        15  Walmart
1      TV        10    2.5    GLOBAL    John        20   Amazon
2      TV         5    2.5  FLAGSHIP  Pankaj        15  Walmart
3      TV         5    2.5  FLAGSHIP    John        20   Amazon
4  iPhone         5    3.5     GREEN    John        10   Amazon
5  iPhone         5    3.5  FLAGSHIP    John        10   Amazon
6      TV        20    2.5    GLOBAL  Pankaj        15  Walmart
7      TV        20    2.5    GLOBAL    John        20   Amazon

让我知道这是否适合你

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM