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

如何将df2按日期区间匹配后聚合到df1对应行生成分组求和宽表

解决方案

首先确保所有日期字段转换为datetime类型,避免区间匹配出错,后续直接对匹配结果做分组聚合、宽表转换后合并到原df_1即可,完整实现代码如下:

import pandas as pd

# 第一步:统一转换日期格式
df_1['date'] = pd.to_datetime(df_1['date'])
df_2['open'] = pd.to_datetime(df_2['open'])
df_2['close'] = pd.to_datetime(df_2['close'])

# 第二步:给df2设置区间索引,和原有逻辑一致
df_2.index = pd.IntervalIndex.from_arrays(df_2['open'], df_2['close'], closed='both')

# 第三步:定义单日期的聚合逻辑
def get_agg_size(date):
    # 匹配当前日期对应的所有df2行
    matched_rows = df_2.iloc[df_2.index.get_loc(date)]
    # 按location+division分组求和size
    grouped = matched_rows.groupby(['location', 'division'])['size'].sum()
    # 把多级索引拼接成单级列名
    grouped.index = grouped.index.map(lambda x: f"{x[0]}_{x[1]}")
    return grouped

# 第四步:对df1所有日期执行聚合,未匹配到的分组填充0
agg_result = df_1['date'].apply(get_agg_size).fillna(0).astype(int)

# 第五步:合并聚合结果到原df1
final_df = pd.concat([df_1.drop(columns=['events'], errors='ignore'), agg_result], axis=1)

执行后得到的final_df就是需求中的输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:24:00