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

Python如何筛选pandas DataFrame仅保留含单个商品的订单数据

问题说明

现有一个包含多列的DataFrame,列名分别为Customerid、OrderNumber、PartNumber、Description、Revenue,示例数据如下:

CustomerId  OrderNumber PartNumber  Description Revenue
0   6512345 1   ABC1    KitKat  2
1   6512345 1   ABC2    Chips   3
2   6512345 1   ABC3    Coke    2
3   4213124 2   GFA1    Sprite  2
4   2132142 3   FGA1    Beer    3
5   3242342 4   DCA1    Mentos  4
6   3242342 4   DCA2    Fanta   2
7   8768655 5   ABC1    KitKat  2

需求为筛选仅保留商品数为1的订单所有行,10万级数据量下需要通用自动实现方法,不可手动指定要排除的订单编号。

实现方法

以下两种方法均适用于10万+行的数据集,性能优异,输出结果和手动筛选的结果一致:

方法1:transform直接筛选(写法最简洁)

import pandas as pd

sample = pd.read_excel('../data/Sample.xlsx')
# 按订单号分组后统计每组行数,仅保留行数为1的分组对应行
sample = sample[sample.groupby('OrderNumber')['OrderNumber'].transform('count') == 1]

方法2:先筛选符合条件的订单号再过滤(可读性更高)

import pandas as pd

sample = pd.read_excel('../data/Sample.xlsx')
# 统计每个订单的商品数量
order_item_count = sample.groupby('OrderNumber').size()
# 提取仅含1件商品的订单编号
single_item_order_ids = order_item_count[order_item_count == 1].index
# 过滤原表仅保留对应订单数据
sample = sample[sample['OrderNumber'].isin(single_item_order_ids)]

运行后输出结果如下:

CustomerId  OrderNumber PartNumber  Description Revenue
3   4213124 2   GFA1    Sprite  2
4   2132142 3   FGA1    Beer    3
7   8768655 5   ABC1    KitKat  2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:15:03