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

如何基于Pandas DataFrame中连续特征序列实现分组?

可行,以下是两种实用实现思路

思路1:基于已知key序列的滑动窗口匹配

适合无需完全依赖last_in_block标记的场景,直接通过匹配key特征序列定位数据块:

  1. 准备目标序列并生成滑动窗口匹配
import pandas as pd
import numpy as np

# 你的已知key特征序列
target_seq = [2, 4, 1, 6, 3, 3, 3, 5]
seq_length = len(target_seq)

# 生成key列的滑动窗口,窗口长度与目标序列一致
key_windows = np.lib.stride_tricks.sliding_window_view(df['key'].values, seq_length)
# 筛选出所有完全匹配目标序列的起始索引
match_starts = np.where((key_windows == target_seq).all(axis=1))[0]
  1. 为匹配块分配分组ID
# 初始化分组ID列
df['group_id'] = np.nan

# 给每个匹配块分配连续的分组ID
for group_num, start_idx in enumerate(match_starts):
    end_idx = start_idx + seq_length - 1
    df.loc[start_idx:end_idx, 'group_id'] = group_num

# 给未匹配的行标记(可选)
df['group_id'] = df['group_id'].fillna('unmatched')
  1. 执行分组操作
# 按group_id分组,保留未匹配组
grouped = df.groupby('group_id', dropna=False)

# 示例:生成每个组的统计摘要
group_summary = grouped.agg(
    earliest_time=('timestamp', 'min'),
    latest_time=('timestamp', 'max'),
    avg_value=('value', 'mean')
)

思路2:结合last_in_block标记+序列验证

优先利用已有的块结束标记分割数据,再验证每个块的key序列,适合大型DataFrame(性能更优):

  1. 通过last_in_block定位所有块的起止位置
# 获取所有块结束行的索引
block_end_indices = df[df['last_in_block']].index.tolist()
# 计算对应块的起始索引:第一个块从0开始,后续块以上一个块结束的下一行起始
block_start_indices = [0] + [idx + 1 for idx in block_end_indices[:-1]]
  1. 验证块序列并分配分组ID
df['group_id'] = 'invalid'
valid_group_num = 0

for start, end in zip(block_start_indices, block_end_indices):
    # 提取当前块的key序列
    current_block_keys = df.loc[start:end, 'key'].tolist()
    # 验证是否匹配目标序列
    if current_block_keys == target_seq:
        df.loc[start:end, 'group_id'] = valid_group_num
        valid_group_num += 1
  1. 执行分组操作
grouped = df.groupby('group_id')

# 示例:筛选有效块并聚合
valid_blocks = grouped.get_group('invalid').drop()  # 排除无效块
valid_block_summary = valid_blocks.agg(...)

例外情况处理

对于少数序列不完整的异常块:

  • 可标记为invalid后单独处理
  • 若允许部分匹配,可调整逻辑(比如用相似度阈值替代完全匹配)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:18:26