如何计算字符串连续数字最大个数及DataFrame最长连续数据段?
问题解决方案
问题1:计算字符串中连续数字的最大个数
解决思路
遍历字符串,实时统计当前连续数字的长度,同时记录过程中的最大值;也可以用正则表达式匹配所有连续数字子串,再取最长子串的长度。
实现代码
方法1:遍历统计法
def max_consecutive_digits(s): max_len = 0 current_len = 0 for char in s: if char.isdigit(): current_len += 1 max_len = max(max_len, current_len) else: current_len = 0 return max_len # 测试示例 test_str = "x12y345z6789a" print(max_consecutive_digits(test_str)) # 输出5
方法2:正则表达式法
import re def max_consecutive_digits_regex(s): digit_groups = re.findall(r'\d+', s) return max(len(group) for group in digit_groups) if digit_groups else 0 # 测试示例 test_str = "x12y345z6789a" print(max_consecutive_digits_regex(test_str)) # 输出5
问题2:获取DataFrame列中最长连续数值段
解决思路
先对列数据去重(重复值不影响连续数值段的判断),再通过计算相邻元素的差值生成分组标识,最后筛选出长度最长的分组对应的数值序列。
实现代码
import pandas as pd # 构造目标DataFrame df = pd.DataFrame({'col': [1,1,2,3,4,7,8,8,15,19,20,21]}) # 1. 去重并重置索引 unique_vals = df['col'].drop_duplicates().reset_index(drop=True) # 2. 计算相邻差值,生成分组标识(差值不为1时切换分组) diff_flag = unique_vals.diff() != 1 group_ids = diff_flag.cumsum() # 3. 找到长度最长的分组 longest_group_id = group_ids.value_counts().idxmax() # 4. 提取最长连续数值段 longest_sequence = unique_vals[group_ids == longest_group_id].tolist() print(longest_sequence) # 输出[1,2,3,4]
内容的提问来源于stack exchange,提问作者Stanley Ewing
相关产品推荐
相关产品推荐

