如何将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
相关产品推荐
相关产品推荐

