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

按Sequence ID分组筛选对应最大Duration的SubSeq列组合

解决方法:用Pandas处理宽表转长表后筛选最大值

我来帮你搞定这个需求,核心思路是先把你的宽格式DataFrame转成更方便处理的长格式,再按Sequence ID分组筛选出Duration最大的记录。下面是具体步骤和代码:

1. 准备输入数据

首先我们先把你给出的输入数据构造成Pandas DataFrame:

import pandas as pd

# 构造输入数据
data = {
    'Sequence': [1001, 1001, 1001, 1002, 1002, 1003, 1003, 1004, 1004, 1004],
    'SubSeq1': [145, 475, 685, 125, 475, 325, 125, 129, 547, 666],
    'Duration1': [0, 20, 57, 54, 21, 68, 97, 15, 47, 65],
    'SubSeq2': [125, 175, 687, 175, 467, 301, 325, 429, 577, 722],
    'Duration2': [53, 54, 77, 96, 32, 54, 85, 41, 52, 63],
    'SubSeq3': [458, 652, 254, 786, 526, 529, 872, 981, 543, 257],
    'Duration3': [33, 45, 88, 26, 32, 41, 78, 82, 83, 85]
}

df = pd.DataFrame(data)

2. 宽表转长表

你的数据里SubSeqN和DurationN是成对的列,我们可以用pd.wide_to_long把它们转换成统一的SubSeq和Duration列,这样后续筛选会更简单:

# 转换为长格式
long_df = pd.wide_to_long(
    df,
    stubnames=['SubSeq', 'Duration'],  # 列名的前缀
    i='Sequence',  # 索引列,这里是Sequence ID
    j='seq_num',  # 生成的新列,用来标记原来的组号(1/2/3)
    sep=''  # 列名里前缀和数字之间没有分隔符
).reset_index()

转换后的长表会把所有的SubSeq和Duration整合到两列里,每个Sequence ID对应原来的所有SubSeq-Duration组合。

3. 按Sequence分组筛选最大值

接下来我们按Sequence分组,找出每个组里Duration最大的那一行。这里可以用groupby结合idxmax()来定位最大值所在的行,再提取这些行:

# 找出每个Sequence中Duration最大的行的索引
max_idx = long_df.groupby('Sequence')['Duration'].idxmax()

# 提取对应的行
result_df = long_df.loc[max_idx, ['Sequence', 'SubSeq', 'Duration']].reset_index(drop=True)

4. 查看结果

运行完上面的代码,result_df就是你想要的输出:

Sequence  SubSeq  Duration
0      1001     254        88
1      1002     175        96
2      1003     125        97
3      1004     257        85

完全符合你给出的期望输出。

补充说明:

如果你的列名有不同的格式(比如带下划线,比如Sub_Seq1),只需要调整wide_to_long里的sep参数就行。另外,如果同一个Sequence里有多个相同的最大Duration,idxmax()会取第一个出现的,要是需要保留所有最大值,可以用transform来筛选:

# 保留所有Duration等于组内最大值的行
result_df = long_df[long_df.groupby('Sequence')['Duration'].transform(max) == long_df['Duration']]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 19:17:31