基于不动产ID提取DataFrame唯一价格值 统计每日价格变动频率
不动产价格日变动次数统计实现方案
核心实现逻辑为:先对每套不动产的历史价格按时间排序,标记出价格发生变动的记录,再基于变动记录统计每日总变动次数,完整代码如下:
import pandas as pd # 1. 预处理日期字段,确保格式正确,若原字段含时分秒可提取纯日期部分 dfAvg['UPDATE_DATE'] = pd.to_datetime(dfAvg['UPDATE_DATE']).dt.date # 不需要提取日期可删除这行 # 2. 按不动产唯一编号、更新日期排序,保证同个不动产的记录按时间顺序排列 dfAvg = dfAvg.sort_values(by=['UNIQUE_RE_NUMBER', 'UPDATE_DATE'], ignore_index=True) # 3. 标记价格变动记录:同一不动产当前价格与上一条记录价格不同则记为变动 # diff()计算当前值与前值的差值,ne(0)即差值不等于0代表价格变化 dfAvg['IS_CHANGE'] = dfAvg.groupby('UNIQUE_RE_NUMBER')['RE_PRICE'].diff().ne(0) # 每套不动产的第一条记录无前置对比数据,默认标记为变动(如果不需要统计首次录入可改为False) dfAvg['IS_CHANGE'] = dfAvg['IS_CHANGE'].fillna(True) # 4. 筛选出所有价格变动的记录 change_records = dfAvg[dfAvg['IS_CHANGE']].copy() # 5. 统计每日总变动次数,写入FREQUENCY字段 change_records['FREQUENCY'] = change_records.groupby('UPDATE_DATE')['UPDATE_DATE'].transform('count') # 6. 提取需要的核心字段得到最终结果 result_df = change_records[['UPDATE_DATE', 'UNIQUE_RE_NUMBER', 'RE_PRICE', 'FREQUENCY']]
说明
- 原代码直接按日期统计所有记录并去重的逻辑会丢弃同一天其他不动产的变动记录,且未过滤价格未变动的记录,上述代码已经解决这两个问题
- 如果不需要统计每套不动产的首次价格录入为变动,只需要将
dfAvg['IS_CHANGE'] = dfAvg['IS_CHANGE'].fillna(True)中的True改为False即可
内容的提问来源于stack exchange,提问作者Deesak
相关产品推荐
相关产品推荐

