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

如何对含Alpha且有其他类型的ID/Category/Site组合计算时间差与实例数

Pandas分组统计:筛选含Alpha且存在其他Type的组合并计算指标

原始数据集

import pandas as pd

df = pd.DataFrame(
[[1,'A','X','1/2/22 12:00:00AM', 'Alpha'], 
[1,'A','X','1/3/22 12:00:00AM', 'Alpha'], 
[1,'A','X','1/1/22 12:00:00AM', 'Beta'], 
[1,'A','X','1/2/22 1:00:00AM', 'Gamma'], 
[1,'B','Y','1/1/22 1:00:00AM', 'Alpha'],
[2,'A','Z','1/2/22 12:00:00AM', 'Alpha'],
[2,'A','Z','1/1/22 12:00:00AM', 'Alpha'], 
[2,'A','Z','1/1/22 12:00:00AM', 'Beta']],
columns=['ID', 'Category', 'Site', 'Task Completed', 'Type'])

需求说明

  1. 筛选ID/Category/Site组合:该组合必须同时包含Type='Alpha'的记录,且至少存在一种非Alpha的Type
  2. 对筛选出的组合,计算其中Alpha类型记录的Task Completed日期最大最小值之差(天数)
  3. 统计该组合中Alpha类型的实例数量

现有代码问题

原代码未加入Type相关的筛选与计算逻辑,输出结果包含了不符合条件的组合(如ID=1/Category=B/Site=Y),且计算的是全组而非仅Alpha数据的指标。

解决方案代码

import pandas as pd

# 转换日期列为datetime类型
df["Task Completed"] = pd.to_datetime(df["Task Completed"], dayfirst=False)

# 筛选符合条件的分组:包含Alpha且存在其他Type
valid_groups = df.groupby(["ID", "Category", "Site"]).filter(
    lambda group: (group['Type'] == 'Alpha').any() and (group['Type'] != 'Alpha').any()
)

# 仅保留Alpha数据,分组计算时间差和实例数
result = valid_groups[valid_groups['Type'] == 'Alpha'].groupby(
    ["ID", "Category", "Site"], as_index=False
).agg(
    **{
        "Time Difference": ("Task Completed", lambda x: (x.max() - x.min()).days),
        "# of instances": ("Task Completed", "count")
    }
)

print(result)

输出结果

ID Category Site  Time Difference  # of instances
0   1        A    X                1               2
1   2        A    Z                1               2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 05:45:32