如何对落入特定pd.Interval区间的price_interest值求和并合并DataFrame?
实现步骤
1. 为第二个DataFrame匹配对应区间
先基于第一个DataFrame构建zip到对应区间列表的映射,再给第二个DataFrame的每条数据找到所属的binned区间:
# 构建zip到区间列表的字典 zip_to_bins = df1.groupby('zip')['binned'].unique().to_dict() # 定义函数查找每条数据对应的区间 def match_bin(row): for interval in zip_to_bins[row['zip']]: if row['listing_close_price'] in interval: return interval return None # 处理不在任何区间的异常数据 # 为df2添加binned列 df2['binned'] = df2.apply(match_bin, axis=1)
2. 分组求和price_interest
按zip和binned分组,对price_interest求和:
summed_interest = df2.groupby(['zip', 'binned'])['price_interest'].sum().reset_index(name='total_price_interest')
3. 合并到第一个DataFrame
将求和结果与原df1合并,得到目标列:
# 左连接保留df1所有数据,无匹配的用0填充(可选) df1 = df1.merge(summed_interest, on=['zip', 'binned'], how='left').fillna({'total_price_interest': 0})
补充说明
- 如果存在
listing_close_price不在任何区间的情况,上述代码会将其标记为None,分组时会被排除,最终df1对应位置会填充0(如果用了fillna)。 - 若df1中每个
zip的binned区间是唯一且不重叠的,这个方法可以保证每个价格只会匹配到一个区间。
内容的提问来源于stack exchange,提问作者chiggly007
相关产品推荐
相关产品推荐

