使用 Pandas 比较两个数据帧的列并返回不同列的值

时间:2021-02-05 08:42:35

标签: python pandas

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

df_1

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

df_2

<头>
product_id 数量 invoice_total
p1 8 700
p6 3 900
p2 5 600

我想检查 df1 中的产品 ID 是否与 df2 中的产品 ID 相似,如果是,则选择 df2 中发票总额的值。

我试过 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

2 个答案:

答案 0 :(得分:0)

我假设您想要进行“左连接”。

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

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

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

如果这就是您要找的,请告诉我;)

答案 1 :(得分:0)

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

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