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

如何基于指定DEV值对Pandas DataFrame重采样插值并解决重复轴报错

报错原因
  • 未按年度分组处理DEV序列:DEV是每个年度独立的递增序列,不同年份存在相同DEV值,直接全局将DEV设为索引会产生大量重复索引值,触发reindex的重复轴错误
  • 过滤原数据中属于DEV_LIST的DEV记录是多余操作,不符合你保留原有全部DEV值的需求
  • 全局合并DEV并集时未区分年度,进一步加剧索引重复问题
正确实现代码
import pandas as pd

# 配置参数
DEV_LIST = [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]

# 第一步:预处理原始数据,删除空值,按年度+DEV排序保证序列连续
df_clean = df.dropna(subset=['DEV', 'PRICE']).sort_values(['YEAR', 'DEV']).reset_index(drop=True)

# 第二步:按年度分组单独插值,避免跨年度DEV干扰
res_list = []
for year, group in df_clean.groupby('YEAR'):
    # 取当前年度的DEV、PRICE字段,设DEV为索引
    group_idx = group.set_index('DEV')[['PRICE']]
    # 合并原有DEV和目标DEV,去重后升序排列
    all_dev = sorted(set(group_idx.index.tolist() + DEV_LIST))
    # 重索引后按DEV数值间距插值
    group_interp = group_idx.reindex(all_dev).interpolate(method='values').reset_index()
    # 补回年度字段方便后续关联其他信息
    group_interp['YEAR'] = year
    res_list.append(group_interp)

# 第三步:合并所有年度结果得到最终表
final_df = pd.concat(res_list, ignore_index=True)
代码说明
  • 先清理DEV、PRICE为空的无效行,按年度+DEV排序保证每年的发育序列是连续递增的
  • 按年度分组处理,从根源避免不同年份DEV重复导致的索引问题,同时每一年的插值仅基于当年的实际价格序列,结果更符合业务逻辑
  • 合并每年度原有DEV和目标DEV后去重,同时保留全部原始数据和新增的指定DEV监测节点
  • 插值采用values方法,基于DEV的数值间距计算插值结果,匹配发育阶段连续变化的特性

得到的final_df既包含原数据所有DEV对应的原始PRICE,也包含DEV_LIST中指定节点的插值后PRICE,按DEV升序排列,符合你给出的样例输出格式。如果需要回补日期等其他字段,可基于YEAR+DEV和原数据做匹配,或在分组处理时保留对应字段关联即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:36:07