【问题标题】:Comparing columns of two Data Frames and returning the values of a different column using Pandas比较两个数据框的列并使用 Pandas 返回不同列的值
【发布时间】:2021-05-09 14:36:09
【问题描述】:

我是熊猫新手。给定两个数据框:

df_1

product_id product_price invoice_total
p1 100 200
p2 200 300
p3 300 600
p4 400 700

df_2

product_id quantity invoice_total
p1 8 700
p6 3 900
p2 5 600

我想检查 df1 中的产品 id 是否与 df2 相似,如果是,则选择 df2 中的 invoice total 的值。

我已经尝试了 for 循环:

df_new = pd.DataFrame()
for i in df1.product_id:
   for j in df2.product_id:
      if i == j:
         # return the value of df2.invoice_total and append to the df_new.
         

但我相信有更好的方法。

结果应该是这样的:

product_id invoice_total
p1 700
p2 600

【问题讨论】:

  • 相似是什么意思?相同的product_id?如果是这样,您可以使用合并
  • 使用 pd.merge() 完成这项工作

标签: python pandas


【解决方案1】:

我假设你想做一个“左连接”。

df_new = df1.join(df2, how = 'left')

然后在 df_new 中,您可以选择“invoice_total”列并通过以下方式列出它:

df_new['invoice_total'].values.tolist()

如果这就是你要找的东西,请告诉我;)。

【讨论】:

    【解决方案2】:

    您可以为此使用数据框合并

    import pandas as pd
    
    df_1 = pd.DataFrame({
        'product_id': ['p1', 'p2', 'p3', 'p4'],
        'product_price': [100, 200, 300, 400],
        'invoice_total': [200, 300, 600, 700]
    })
    
    df_2 = pd.DataFrame({
        'product_id': ['p1', 'p6', 'p2'],
        'quantity': [8, 3, 5],
        'invoice_total': [700, 900, 600]
    })
    
    df_merged = df_1.merge(
        df_2,
        on='product_id',
        suffixes=('_df1', '')
    )
    

    df_merged 的​​内容

      product_id  product_price  invoice_total_df1  quantity  invoice_total
    0         p1            100                200         8            700
    1         p2            200                300         5            600
    

    然后过滤到只需要的列

    df_merged = df_merged[['product_id', 'invoice_total']]
    

    df_merged 的​​最终内容

      product_id  invoice_total
    0         p1            700
    1         p2            600
    

    【讨论】:

    • 我编辑了问题以进一步澄清。如何获得与上述类似的输出?
    • 我已根据您的新要求修改了我的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    相关资源
    最近更新 更多