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

如何用Python Pandas/Numpy对比价格列表,识别增删及价格变动项?

用Python的Pandas或Numpy对比商品列表差异

当然可以用Pandas或Numpy实现这个需求,以下是两种具体实现方案:

Pandas 实现方案

Pandas的DataFrame合并和索引操作能高效处理这类对比需求:

import pandas as pd

# 定义原始数据
old_list = [["tomato", 10.5], ["lettuce", 9], ["onion", 8], ["cucumber", 5]]
new_list = [["tomato", 7], ["onion", 8], ["cucumber", 5], ["potato", 9]]

# 转换为DataFrame并将商品名设为索引
old_df = pd.DataFrame(old_list, columns=["item", "price"]).set_index("item")
new_df = pd.DataFrame(new_list, columns=["item", "price"]).set_index("item")

# 外连接合并两个DataFrame,区分新旧价格
merged_df = old_df.join(new_df, how="outer", lsuffix="_old", rsuffix="_new")

# 识别各类差异
added_items = merged_df[merged_df["price_old"].isna()].index.tolist()
removed_items = merged_df[merged_df["price_new"].isna()].index.tolist()
price_changed_items = merged_df[
    merged_df["price_old"].notna() & 
    merged_df["price_new"].notna() & 
    (merged_df["price_old"] != merged_df["price_new"])
].index.tolist()

# 输出结果
print("新增商品:", added_items)
print("删除商品:", removed_items)
for item in price_changed_items:
    print(f"{item}价格从{merged_df.loc[item, 'price_old']}变为{merged_df.loc[item, 'price_new']}")

逻辑说明

  1. 将列表转成DataFrame后,用商品名作为索引,方便后续匹配
  2. 通过外连接合并两个表,保留所有商品的新旧价格信息
  3. 利用isna()判断新增(旧价格为空)和删除(新价格为空)的商品
  4. 筛选出新旧价格都存在且不相等的商品,即为价格变动项

Numpy 实现方案

Numpy可以通过结构化数组处理混合类型数据,结合集合运算完成对比:

import numpy as np

# 定义原始数据
old_list = [["tomato", 10.5], ["lettuce", 9], ["onion", 8], ["cucumber", 5]]
new_list = [["tomato", 7], ["onion", 8], ["cucumber", 5], ["potato", 9]]

# 转换为结构化数组(支持字符串和数值混合类型)
old_arr = np.array(old_list, dtype=[('item', 'U20'), ('price', 'f8')])
new_arr = np.array(new_list, dtype=[('item', 'U20'), ('price', 'f8')])

# 提取商品名字段
old_items = old_arr['item']
new_items = new_arr['item']

# 识别新增和删除商品(利用集合差集)
added_items = np.setdiff1d(new_items, old_items).tolist()
removed_items = np.setdiff1d(old_items, new_items).tolist()

# 识别价格变动商品
common_items = np.intersect1d(old_items, new_items)
price_changed = []
for item in common_items:
    old_price = old_arr[old_arr['item'] == item]['price'][0]
    new_price = new_arr[new_arr['item'] == item]['price'][0]
    if old_price != new_price:
        price_changed.append((item, old_price, new_price))

# 输出结果
print("新增商品:", added_items)
print("删除商品:", removed_items)
for item, old_p, new_p in price_changed:
    print(f"{item}价格从{old_p}变为{new_p}")

逻辑说明

  1. 用结构化数组处理字符串+数值的混合数据类型
  2. 通过np.setdiff1d计算集合差集,快速找出新增/删除的商品
  3. 遍历两个列表的公共商品,对比价格找出变动项

内容的提问来源于stack exchange,提问作者Equis User

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 17:48:08