根据另一个数据框中的值将列添加到数据框中

时间:2020-09-18 21:36:34

标签: python pandas dataframe merge pivot-table

我有两个数据框,第一个:

df1

   product     price
0  apples      1.99
1  bananas     1.20 
2  oranges     1.49
3  lemons      0.5
4  Olive Oil   8.99

df2:

   product     product.1     product.2 
0  apples      bananas       Olive Oil
1  bananas     lemons        oranges
2  Olive Oil   bananas       oranges
3  lemons      apples        bananas

我希望第二个数据框中的一列是基于第一个数据框中每个项目的价格的价格总和。因此理想的结果将是:

   product     product.1     product.2     total_price 
0  apples      bananas       Olive Oil     12.18
1  bananas     lemons        oranges       3.19
2  Olive Oil   bananas       oranges       11.68
3  lemons      apples        bananas       3.69

完成此任务的最佳方法是什么?我尝试过合并df2中每个列的名称上的数据框,但这似乎很耗时,尤其是当df1获取更多的行而df2获取更多的列时。

df = pd.merge(df1, df2, how='right', left_on='product', right_on='product')
df = pd.merge(df1, df2, how='right', left_on='product', right_on='product.1')
df = pd.merge(df1, df2, how='right', left_on='product', right_on='product.2') 
df['Total_Price'] = df['price']+df['price.1']+df['price.2']

1 个答案:

答案 0 :(得分:2)

您可以尝试以下操作:

  1. 首先,将df1转换为键和值的字典
  2. 使用上面带有applymap后跟sum的字典

下面的代码片段可能会执行类似的操作:

dictionary_val = { k[0]: k[1] for k in df1.values }
df2['Total_Price'] = df2.applymap(lambda row: dictionary_val[row]).sum(axis=1) # Note not creating new dataframe but using existing one

那么结果是df2

    product    product.1    product.2   Total_Price
0   apples      bananas     Olive Oil    12.18
1   bananas     lemons      oranges      3.19
2   Olive Oil   bananas     oranges      11.68
3   lemons      apples      bananas      3.69