如何在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
相关产品推荐
相关产品推荐

