簡體   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