如何用Pandas计算各区域截至指定日期的房产累计平均价格
实现步骤
首先先做数据格式校验与预处理:
- 先将录入日期字段转换为标准日期格式,避免字符串排序出错,同时提前对房产数据去重,避免同一个房产重复统计:
import pandas as pd # 日期格式转换 dff['UPDATE_DATE'] = pd.to_datetime(dff['UPDATE_DATE']).dt.date # 按房产唯一编号去重,仅保留每个房产最新的一条录入记录 dff = dff.sort_values('UPDATE_DATE', ignore_index=True).drop_duplicates('UNIQUE_RE_NUMBER', keep='last')
方案1:给原表每行追加对应区域当日累计均价
如果需要把累计均价映射回原数据集的每一行,用分组expanding滚动计算实现:
# 先按区域、录入日期升序排序 dff = dff.sort_values(['LOCATION', 'UPDATE_DATE'], ignore_index=True) # 按区域分组后计算累计均值 dff['LOC_CUM_AVG'] = dff.groupby('LOCATION')['RE_PRICE'].expanding().mean().reset_index(drop=True)
方案2:生成单独的区域每日累计均价统计表
如果只需要输出各区域每日的累计均价结果,推荐用先聚合再累计的方式,性能更高、结果更清晰:
# 先按区域、日期聚合每日新增数据 daily_region_stats = dff.groupby(['LOCATION', 'UPDATE_DATE']).agg( daily_house_count=('UNIQUE_RE_NUMBER', 'nunique'), daily_total_price=('RE_PRICE', 'sum') ).reset_index() # 按区域分组计算累计值,再求累计均价 daily_region_stats['cum_house_count'] = daily_region_stats.groupby('LOCATION')['daily_house_count'].cumsum() daily_region_stats['cum_total_price'] = daily_region_stats.groupby('LOCATION')['daily_total_price'].cumsum() daily_region_stats['cum_avg_price'] = daily_region_stats['cum_total_price'] / daily_region_stats['cum_house_count']
最终得到的累计均价字段就是对应区域截至当日所有已录入房产的平均价格,符合需求统计规则:比如2021年1月2日的均价会包含1日和2日所有录入的房产价格。
内容的提问来源于stack exchange,提问作者Deesak
相关产品推荐
相关产品推荐

