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

如何在Pandas中判断字符串是否在指定范围并拆分DataFrame数据

嘿,我来帮你搞定这个DataFrame筛选的问题!看你的数据应该是类似ICD诊断编码的格式,要把特定范围的条目挑出来对吧?下面给你详细的实现步骤和代码:

解决思路

我们需要针对两种不同的范围规则分别处理:

  • 对于C00-C99范围:所有以C开头的编码都属于这个区间(ICD编码中C00到C99是恶性肿瘤分类,后续的小数是细分编码,不影响大类归属)
  • 对于N18.3-N18.6范围:需要精确匹配前缀为N且数字部分在18.3到18.6之间的编码
具体代码实现

首先,先创建示例DataFrame(你可以直接替换成自己的数据集):

import pandas as pd

data = {
    'code': ['C92.20', 'C80', 'C12.30', 'C18.5', 'C40.5', 'E66.01', 
             'C78.5', 'L73.2', 'D46.22', 'N18.3', 'N18.5', 'M34', 'M37', 'N18.8']
}
df = pd.DataFrame(data)

接下来编写筛选条件,把符合要求的行提取出来:

# 条件1:筛选C00-C99范围的编码
condition_c = df['code'].str.startswith('C')

# 条件2:筛选N18.3-N18.6范围的编码
# 先过滤N18开头的编码,再把前缀替换成空转成浮点数,判断是否在目标区间内
condition_n = (df['code'].str.startswith('N18.')) & \
              (df['code'].str.replace('N', '').astype(float).between(18.3, 18.6))

# 合并两个条件,生成新的DataFrame
filtered_df = df[condition_c | condition_n]

运行后,filtered_df就是你需要的结果,输出如下:

code
0   C92.20
1     C80
2   C12.30
3    C18.5
4    C40.5
6    C78.5
9    N18.3
10   N18.5
补充优化说明

如果你的编码中存在类似C100这种超出C99大类的特殊情况(示例里没有,但可以提前预防),可以优化C范围的判断条件,确保数字部分在00-99之间:

# 优化后的C范围条件:提取字母后的部分,取前两位转整数判断
condition_c = (df['code'].str[0] == 'C') & \
              (df['code'].str[1:].str.split('.').str[0].astype(int).between(0, 99))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:24:25