如何用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
相关产品推荐
相关产品推荐

