You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas比较两个DataFrame中物品数量并生成差异DataFrame?

解决方法

首先你代码里有个小拼写错误:pd.Dataframe 应该是 pd.DataFrame(注意大写的F),这个会导致运行报错,先修正这个。

接下来,我们可以通过合并两个DataFrame并筛选条件来实现你的需求,具体步骤如下:

1. 修正基础代码并合并DataFrame

先把两个DataFrame按item列合并,同时给两个数量列重命名,方便后续区分:

import pandas as pd

data_1 = [['banana',10],['orange',2],['strawberry',3]]
data_2 = [['banana',1],['orange',2],['strawberry',5],['melon',8]]

# 修正拼写错误:Dataframe → DataFrame
df_1 = pd.DataFrame(data_1, columns=['item','quantity'])
df_2 = pd.DataFrame(data_2, columns=['item','quantity'])

# 合并两个DataFrame,保留df_1的所有物品,匹配df_2中对应物品的数量
merged_df = pd.merge(
    df_1, 
    df_2, 
    on='item', 
    how='left', 
    suffixes=('_1', '_2')  # 给两个数量列加后缀区分
)

2. 筛选符合条件的差异数据

现在我们可以筛选出df_1中数量小于df_2中对应数量的行,同时排除那些df_2中没有的物品(避免NaN值干扰):

# 筛选条件:df_1的数量 < df_2的数量,且df_2的数量不为空
diff_df = merged_df[(merged_df['quantity_1'] < merged_df['quantity_2']) & (~merged_df['quantity_2'].isna())]

# 整理成你需要的格式(可选,保留item和两个数量列,或者按需调整)
diff_df = diff_df[['item', 'quantity_1', 'quantity_2']].rename(columns={
    'quantity_1': 'data_1_qty',
    'quantity_2': 'data_2_qty'
})

运行这段代码后,diff_df就是你要的差异DataFrame,结果如下:

item  data_1_qty  data_2_qty
2  strawberry           3           5

补充说明

  • 如果你想同时查看df_1中数量大于/等于df_2的情况,只需要调整筛选条件的符号即可(比如>或==)。
  • 如果df_2中存在df_1没有的物品(比如例子里的melon),因为我们用了how='left'合并,这些物品不会出现在结果里,符合你关注data_1中物品的需求。

内容的提问来源于stack exchange,提问作者Joao Pedro Flausino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 10:20:25