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

如何基于VCPI DataFrame按自定义逻辑填充df的C列?

实现DataFrame按规则新增列的解决方案

前提说明

现有两个DataFrame:

  • df:A列存储CPI类型(CPI_x6/CPI/CPI_x9),B列为日期
  • VCPI:date列为日期,附带对应各类型CPI的数值列

实现步骤

1. 统一日期格式为datetime类型

先把两个DataFrame的日期列转成datetime格式,方便后续时间范围计算:

import pandas as pd

# 转换df的日期列
df['B'] = pd.to_datetime(df['B'], format='%d/%m/%Y')
# 转换VCPI的日期列并设为索引,加快查找速度
VCPI['date'] = pd.to_datetime(VCPI['date'], format='%d/%m/%Y')
VCPI = VCPI.set_index('date')

2. 编写逻辑处理函数

定义一个函数,接收df的每一行数据,根据A列的CPI类型返回对应计算结果:

def get_c_value(row):
    cpi_type = row['A']
    target_date = row['B']
    
    if cpi_type == 'CPI':
        # 直接取对应日期的CPI数值
        return VCPI.loc[target_date, 'CPI']
    elif cpi_type == 'CPI_x6':
        # 计算目标日期往后6个月内的CPI_x6平均值
        end_date = target_date + pd.DateOffset(months=6)
        # 筛选出指定区间内的数据
        date_mask = (VCPI.index >= target_date) & (VCPI.index <= end_date)
        return VCPI.loc[date_mask, 'CPI_x6'].mean()
    elif cpi_type == 'CPI_x9':
        # 计算目标日期往后9个月内的CPI_x9平均值
        end_date = target_date + pd.DateOffset(months=9)
        date_mask = (VCPI.index >= target_date) & (VCPI.index <= end_date)
        return VCPI.loc[date_mask, 'CPI_x9'].mean()

3. 生成新列C

用apply方法将函数应用到df的每一行,生成新增的C列:

df['C'] = df.apply(get_c_value, axis=1)

结果验证

用示例数据测试后,最终df的结果如下:

ABC
CPI_x62015-01-01153.333...
CPI2015-01-01200
CPI_x92015-03-01566.666...
CPI2015-05-01150

补充提示

  • 如果VCPI存在日期缺失的情况,mean()会自动忽略空值
  • 使用pd.DateOffset处理月份增减,能避免跨月日期溢出的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 18:30:21