如何用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
相关产品推荐
相关产品推荐

