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

如何用Pandas Groupby筛选无16位长度CODE的STOCK

筛选所有关联CODE均不为16位的STOCK

原始数据

import pandas as pd

data = [['123456ABCD234567', 'A'], ['8502', 'A'], 
    ['74523654894WRZI3', 'B'], ['85CGNK6987541236', 'B'], 
    ['WF85Z4HJ95R4CF2V', 'C'], ['VB52FG85RT74DF96', 'C'],
    ['WERTZ852146', 'D'], ['APUNGF', 'D']
   ]
df = pd.DataFrame(data, columns=['CODE', 'STOCK'])

需求:筛选出所有关联的CODE全部都不是16位长度的STOCK(示例中仅STOCK D符合要求)。

解决方案

通过groupby结合字符串长度判断即可实现,以下提供两种可行写法:

写法一:分步实现(逻辑清晰)

# 1. 标记每个CODE是否为16位
df['is_16_len'] = df['CODE'].str.len() == 16

# 2. 分组筛选出没有任何16位CODE的STOCK
invalid_stocks = df.groupby('STOCK')['is_16_len'].apply(lambda x: not x.any()).loc[lambda x: x].index

# 3. 提取符合条件的行并移除辅助列
result = df[df['STOCK'].isin(invalid_stocks)].drop('is_16_len', axis=1)

print(result)

写法二:链式调用(代码简洁)

result = df[df['STOCK'].isin(
    df.groupby('STOCK')['CODE']
      .apply(lambda group: (group.str.len() != 16).all())
      .loc[lambda x: x].index
)]

print(result)

输出结果

CODE STOCK
6  WERTZ852146     D
7       APUNGF     D

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 10:05:12