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

如何批量删除包含shipped或picked_up状态的订单全部行数据

问题:如何删除包含特定状态订单的全部行?

输入数据

order_idstatusorder_date
ord1in_progress20221125
ord1in_progress20221126
ord1in_progress20221127
ord1shipped20221128
ord2in_progress20221127
ord2in_progress20221128
ord2in_progress20221129
ord2in_progress20221130
ord3in_progress20221126
ord3picked_up20221127

期望输出

order_idstatusorder_date
ord2in_progress20221127
ord2in_progress20221128
ord2in_progress20221129
ord2in_progress20221130

需求说明:删除所有曾出现shipped或picked_up状态的订单的全部行,只保留从未有这两种状态的订单数据。


解决方案

1. SQL 实现

通过子查询先定位所有包含目标状态的订单ID,再排除这些订单的所有行:

SELECT *
FROM your_table_name
WHERE order_id NOT IN (
    SELECT DISTINCT order_id
    FROM your_table_name
    WHERE status IN ('shipped', 'picked_up')
);

逻辑:先找出所有出现过shipped或picked_up的订单ID,主查询只保留不在这个列表里的订单数据。

2. Python Pandas 实现

通过分组筛选出无目标状态的订单ID,再过滤原数据:

import pandas as pd

# 构造示例DataFrame(实际可通过read_csv/read_excel读取数据)
df = pd.DataFrame([
    ['ord1', 'in_progress', '20221125'],
    ['ord1', 'in_progress', '20221126'],
    ['ord1', 'in_progress', '20221127'],
    ['ord1', 'shipped', '20221128'],
    ['ord2', 'in_progress', '20221127'],
    ['ord2', 'in_progress', '20221128'],
    ['ord2', 'in_progress', '20221129'],
    ['ord2', 'in_progress', '20221130'],
    ['ord3', 'in_progress', '20221126'],
    ['ord3', 'picked_up', '20221127']
], columns=['order_id', 'status', 'order_date'])

# 筛选出从未出现shipped/picked_up的订单ID
valid_orders = df.groupby('order_id').filter(
    lambda group: not group['status'].isin(['shipped', 'picked_up']).any()
)['order_id'].unique()

# 过滤得到结果
result_df = df[df['order_id'].isin(valid_orders)]
print(result_df)

3. Excel 实现

  1. 添加辅助列(如D列),输入公式判断当前订单是否包含目标状态:
    =COUNTIFS(A:A,A2,C:C,"shipped")+COUNTIFS(A:A,A2,C:C,"picked_up")
    
    公式返回值>0表示该订单存在shipped或picked_up状态。
  2. 筛选辅助列值为0的行,即为需要保留的数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:40:20