【问题标题】:Adding column to dataframe based on values in another dataframe根据另一个数据框中的值将列添加到数据框中
【发布时间】:2020-09-18 21:36:34
【问题描述】:

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

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

【问题讨论】:

标签: python pandas dataframe merge pivot-table


【解决方案1】:

您可以尝试以下方法:

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

可能跟随 sn-p 会做类似的事情:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多