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

如何用Python和Pandas获取到最后一个唯一值的完整序列

问题:获取到最后一个唯一值为止的完整序列(保留原顺序)

需求:从序列中提取到最后一个唯一值为止的完整子序列,保留原顺序(这里的“最后一个唯一值”指整个数据集所有唯一值中的最后一个元素,并非最大值)。

示例数据:

import pandas as pd

data_dict = {"RAW": [4000076160, 5354368, 4641792, 4641792, 4289860736, 982783232, 2122384768,
                     4136386944, 5440384, 4772864, 4772864, 4289881216,                     
                     4270354816, 4293477248, 4286243840, 4286243840, 3400832, 982783232, 2122384768],
             "ADC_TYPE": [3, 7, 8, 8, 9, 10, 11,
                          3, 7, 8, 8, 9,                          
                          3, 7, 8, 8, 9, 10, 11]}

df = pd.DataFrame(data_dict)

生成的DataFrame:

RAW  ADC_TYPE
0   4000076160         3
1      5354368         7
2      4641792         8
3      4641792         8
4   4289860736         9
5    982783232        10
6   2122384768        11
7   4136386944         3
8      5440384         7
9      4772864         8
10     4772864         8
11  4289881216         9
12  4270354816         3
13  4293477248         7
14  4286243840         8
15  4286243840         8
16     3400832         9
17   982783232        10
18  2122384768        11

现有尝试的问题:使用df["ADC_TYPE"].unique().tolist()只能得到去重后的唯一值列表[3, 7, 8, 9, 10, 11],无法得到包含重复元素的完整序列。

目标输出:[3, 7, 8, 8, 9, 10, 11]


解决方案

方法一:Pandas实现

核心思路:先获取所有唯一值的集合,遍历序列时跟踪已出现的唯一值,当已出现的集合覆盖所有唯一值时,记录当前位置并提取前缀序列。

import pandas as pd

data_dict = {"RAW": [4000076160, 5354368, 4641792, 4641792, 4289860736, 982783232, 2122384768,
                     4136386944, 5440384, 4772864, 4772864, 4289881216,                     
                     4270354816, 4293477248, 4286243840, 4286243840, 3400832, 982783232, 2122384768],
             "ADC_TYPE": [3, 7, 8, 8, 9, 10, 11,
                          3, 7, 8, 8, 9,                          
                          3, 7, 8, 8, 9, 10, 11]}

df = pd.DataFrame(data_dict)

# 获取所有唯一值的集合
all_unique = set(df['ADC_TYPE'].unique())

seen = set()
end_index = None

# 遍历序列,找到首次覆盖所有唯一值的位置
for idx, val in enumerate(df['ADC_TYPE']):
    seen.add(val)
    if seen == all_unique:
        end_index = idx
        break

# 提取目标序列
target_sequence = df['ADC_TYPE'][:end_index+1].tolist()
print(target_sequence)

输出:

[3, 7, 8, 8, 9, 10, 11]

方法二:Python原生实现

直接处理原始列表,逻辑与Pandas方法一致:

adc_type_list = [3, 7, 8, 8, 9, 10, 11, 3, 7, 8, 8, 9, 3, 7, 8, 8, 9, 10, 11]

all_unique = set(adc_type_list)
seen = set()
end_index = None

for idx, val in enumerate(adc_type_list):
    seen.add(val)
    if seen == all_unique:
        end_index = idx
        break

target_sequence = adc_type_list[:end_index+1]
print(target_sequence)

输出:

[3, 7, 8, 8, 9, 10, 11]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:36:33