[英]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.