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

Pandas:查找列中间隔50单位的连续数据项

搞定Pandas中连续区间的查找问题

嘿,我明白你的需求了——要按alt分组,找出那些start和end首尾衔接(刚好对应你说的50单位间隔区间)的连续数据项对吧?咱们一步步来实现:

第一步:先构造示例数据(方便你测试)

先把你给的示例数据转换成可操作的DataFrame:

import pandas as pd

data = {
    'alt': ['borderline', 'borderline', 'borderline', 'duplicated', 'borderline', 'borderline'],
    'start': [6017254, 6017304, 6017354, 6018212, 6018262, 6018312],
    'end': [6017304, 6017354, 6017404, 6018262, 6018312, 6018362]
}
df = pd.DataFrame(data)

第二步:标记连续的区间行

核心思路是:同一alt组内,如果当前行的start等于上一行的end,就说明这两行是连续的。我们用groupby结合shift()来做判断:

# 按alt分组,比较当前行start和前一行end是否相等
df['is_continuous'] = df.groupby('alt')['start'].shift() == df['end'].shift(1)
# 每个组的第一行没有前一行,所以填充为False
df['is_continuous'] = df['is_continuous'].fillna(False)

# 给每个连续块生成唯一ID:每次遇到不连续的行,ID就加1
df['continuous_block'] = df.groupby('alt')['is_continuous'].cumsum().astype(int)
# 把ID调整为从1开始,看着更直观
df['continuous_block'] = df.groupby('alt')['continuous_block'].transform(lambda x: x + 1)

现在查看df,同一连续块的行会有相同的continuous_block值——比如前3条borderline属于块1,最后两条borderline属于块2,单独的duplicated属于块1。

第三步:合并连续区间(可选)

如果想把连续的小区间合并成一个完整的大区间,直接分组聚合就行:

merged_continuous = df.groupby(['alt', 'continuous_block']).agg(
    start=('start', 'first'),  # 取块内第一个起始值
    end=('end', 'last'),       # 取块内最后一个结束值
    total_intervals=('start', 'count')  # 统计这个块包含多少个小区间
).reset_index()

运行后得到的结果会是这样:

altcontinuous_blockstartendtotal_intervals
borderline1601725460174043
borderline2601826260183622
duplicated1601821260182621

第四步:筛选真正的连续块(可选)

如果你只想保留那些由多个连续小区间组成的块,过滤掉单个区间的就行:

only_continuous_blocks = merged_continuous[merged_continuous['total_intervals'] > 1]

这样就得到了所有符合你要求的连续数据块啦!


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:40:19