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

分组后获取最小时间差的实现方法

问题描述

给定如下数据结构:

df_columns = {
    'firm_ID': [1, 1, 2, 2, 2],
    'date_incident' : ['2015-01-01', '2015-01-01', '2016-10-01', '2016-10-01', '2016-10-01'],
    'date_meeting' : ['2014-02-01', '2016-03-01', '2015-10-01', '2017-02-01', '2018-11-01'],
    }
simple_df = pd.DataFrame(df_columns)
simple_df['date_incident'] = pd.to_datetime(simple_df['date_incident'])
simple_df['date_meeting'] = pd.to_datetime(simple_df['date_meeting'])
simple_df['date_delta'] = simple_df['date_incident'] - simple_df['date_meeting']

每个firm_ID对应唯一的date_incident,但对应多个date_meeting。需要新增一列,返回每个firm_ID对应的最小date_delta(差值可为负数)。例如firm_ID=2时,最小时间差为-123天。

解决方案

使用pandas的分组聚合功能,按firm_ID分组后,通过transform('min')将每组的最小date_delta映射到原DataFrame的每一行:

# 新增min_date_delta列
simple_df['min_date_delta'] = simple_df.groupby('firm_ID')['date_delta'].transform('min')

结果验证

执行上述代码后,simple_df的输出如下:

firm_IDdate_incidentdate_meetingdate_deltamin_date_delta
12015-01-012014-02-01334 days-60 days
12015-01-012016-03-01-60 days-60 days
22016-10-012015-10-01365 days-123 days
22016-10-012017-02-01-123 days-123 days
22016-10-012018-11-01-761 days-123 days

可以看到,firm_ID=2的最小date_delta为-123天,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:45:30