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

Pandas如何编写按时间段调整日期的函数,实现SQL PARTITION BY效果

解决方案

我们可以通过groupby结合自定义分组处理函数实现需求,核心逻辑是在每个id分组内按时间升序遍历,动态更新基准时间完成滑动2天窗口的时间聚合,效果等同于SQL的PARTITION BY id窗口逻辑。

完整实现代码

import pandas as pd

def process_id_group(dt_series):
    # 组内先按时间升序排序
    sorted_dt = dt_series.sort_values()
    current_base = sorted_dt.iloc[0]
    res = []
    for dt in sorted_dt:
        # 按需求调整时间差阈值,此处<2匹配示例预期,如需包含刚好2天可改为<=2
        if (dt - current_base).days < 2:
            res.append(current_base)
        else:
            current_base = dt
            res.append(current_base)
    # 返回和原始索引对齐的结果,保证分组处理后行顺序不错乱
    return pd.Series(res, index=sorted_dt.index)

# 测试示例
d1 = {'id': ['a','a','a','a','b','a','b'], 'datetime': ['10/25/2021 0:00','10/26/2021 0:00','11/28/2021 0:00','11/29/2021 0:00','11/29/2021 0:00', '11/30/2021 0:00', '11/30/2021 0:00']}
df1 = pd.DataFrame(d1)
df1['datetime'] = pd.to_datetime(df1['datetime'])

# 按id分组执行处理逻辑
df1['datetime'] = df1.groupby('id')['datetime'].transform(process_id_group)

# 按id、时间排序后和期望输出完全一致
df1 = df1.sort_values(by=['id', 'datetime']).reset_index(drop=True)

结果验证

处理后的df1输出和预期完全匹配:

iddatetime
a2021-10-25 00:00:00
a2021-10-25 00:00:00
a2021-11-28 00:00:00
a2021-11-28 00:00:00
a2021-11-30 00:00:00
b2021-11-29 00:00:00
b2021-11-29 00:00:00

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:36:03