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

如何聚合集合列?Pandas DataFrame按15分钟周期提取唯一ID

解决Pandas按15分钟聚合唯一ID集合的问题

嘿,我来帮你搞定这个需求!你之前用sum没成功很正常,因为sum对列表/集合只是简单拼接(甚至集合会直接报错),没法帮你完成去重操作。下面给你一步步拆解实现方法:

第一步:先把时间列转成可识别的格式

首先得确保你的时间列是Pandas能处理的datetime类型,不然没法按时间窗口聚合:

import pandas as pd
df['timestamp'] = pd.to_datetime(df['timestamp'])  # 替换成你实际的时间列名

如果你的ID集合列是字符串形式(比如"[1,2,3]"),得先转成列表/集合才能处理:

import ast
df['id_set'] = df['id_set'].apply(ast.literal_eval)  # 替换成你实际的ID集合列名

第二步:写个自定义聚合函数

我们需要一个函数,把每个15分钟窗口里的所有ID集合合并,然后去重得到唯一ID。这里推荐用itertools.chain来高效合并,数据量大的时候更省心:

from itertools import chain

def collect_unique_ids(series):
    # 把窗口内所有ID集合拆成单个ID,转成集合去重后再转回列表(列表格式可选)
    all_ids = chain.from_iterable(series)
    return list(set(all_ids))

要是你不想用itertools,用基础写法也可以:

def collect_unique_ids(series):
    all_ids = []
    for ids in series:
        all_ids.extend(ids)
    return list(set(all_ids))

第三步:按15分钟窗口执行聚合

用resample方法指定15分钟周期('15T'),然后应用上面的聚合函数就行:

# 方法1:把时间列设为索引后聚合
result = df.set_index('timestamp').resample('15T')['id_set'].apply(collect_unique_ids).reset_index()

# 方法2:不想改索引的话,用`on`参数指定时间列
result = df.resample('15T', on='timestamp')['id_set'].apply(collect_unique_ids).reset_index()

举个完整的例子

假设你的原始数据是这样的:

data = {
    'timestamp': ['2024-05-20 09:00:00', '2024-05-20 09:10:00', '2024-05-20 09:16:00', '2024-05-20 09:25:00'],
    'id_set': [[1,2,3], [2,4], [3,5], [5,6]]
}
df = pd.DataFrame(data)

运行上面的代码后,result会输出:

timestamp      id_set
0 2024-05-20 09:00:00  [1, 2, 3, 4]
1 2024-05-20 09:15:00        [3, 5]
2 2024-05-20 09:30:00        [5, 6]

这样每个15分钟窗口里的唯一ID就都提取出来啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:31:18