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

如何在pandas DataFrame中高效统计各id_1跨12月与1月的共同id_2数量?

解决方案:统计跨月份共同出现的id_2数量

需求说明

针对每个id_1,统计其在12月和1月中共同出现的id_2的数量(即同一个id_2既在12月与id_1关联,又在1月与id_1关联)。

示例输入

id_1id_2Date
12120221216
12120230113
12120230116
12220221213
12220230118
18720221207
18720220907
18720230113
18520230118

预期输出

id_1Nb
122
181

高效实现(无多次Merge)

可以通过分组统计+条件过滤的方式实现,全程仅需一次数据扫描和分组操作,避免多次Merge。以下是SQL实现代码:

SELECT 
    id_1,
    COUNT(DISTINCT id_2) AS Nb
FROM (
    SELECT 
        id_1,
        id_2
    FROM 
        your_table_name
    WHERE 
        SUBSTRING(Date, 5, 2) IN ('12', '01') -- 筛选12月和1月的数据
    GROUP BY 
        id_1, id_2
    HAVING 
        COUNT(DISTINCT SUBSTRING(Date, 5, 2)) = 2 -- 保留同时出现在两个月份的(id_1,id_2)对
) AS filtered_pairs
GROUP BY 
    id_1;

代码逻辑解释

  1. 筛选目标月份数据:通过SUBSTRING(Date,5,2)提取日期中的月份部分,只保留12月('12')和1月('01')的记录。
  2. 验证跨月存在性:按id_1和id_2分组,统计每个组内不同月份的数量。若数量为2,说明该id_2同时在两个月份与id_1关联。
  3. 统计最终结果:对过滤后的有效(id_1,id_2)对,按id_1分组并统计不同id_2的数量,得到最终结果。

优化说明

  • 避免了多次Merge操作:全程仅通过嵌套分组完成,无需对不同月份的数据做Join或Merge。
  • 自动去重:内层分组去除了同一月份内(id_1,id_2)的重复记录,避免重复统计。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 08:25:31