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

如何基于条件新增DataFrame列并按日期规则赋值

整合实现代码

先修正你原代码中的几个问题:

  • assign是DataFrame的方法,不能用索引方式调用,直接用列索引赋值更直接
  • 年份需要取后两位,原代码取的是完整年份
  • 建议取第一个有效日期(iloc[0])来生成统一值,避免因索引问题报错

以下是完整的整合代码:

import pandas as pd

# 示例数据准备
df2 = pd.DataFrame({'Survey Sent Date': ["2022-03-23 08:00:00", "2022-03-23 08:00:00", 
                                         "2022-03-23 08:00:00", "2022-03-23 08:00:00", 
                                         "2022-03-23 08:00:00"]})

# 转换日期列类型
df2['Survey Sent Date'] = pd.to_datetime(df2['Survey Sent Date'], errors='coerce')

# 检查列是否存在,不存在则新增并赋值
if "Survey Name" not in df2.columns:
    # 取第一个有效日期生成统一的Survey Name值
    first_valid_date = df2['Survey Sent Date'].dropna().iloc[0]
    quarter = first_valid_date.quarter
    year_short = str(first_valid_date.year)[-2:]  # 取年份后两位
    survey_name = f"Q{quarter}{year_short} Our Voice - CBS"
    df2['Survey Name'] = survey_name

print(df2)

代码说明

  • 日期类型转换:用pd.to_datetime将字符串日期转为datetime类型,errors='coerce'会把无效日期转为NaT
  • 列存在性判断:通过df2.columns检查目标列是否已存在,避免重复创建
  • 值生成逻辑:
    • 先过滤掉无效日期(dropna()),取第一个有效日期确保能正确提取季度和年份
    • 年份通过字符串切片取后两位,符合YY的格式要求
    • 用f-string拼接成指定格式的字符串,统一赋值给新列

运行结果

Survey Sent Date          Survey Name
0 2022-03-23 08:00:00  Q122 Our Voice - CBS
1 2022-03-23 08:00:00  Q122 Our Voice - CBS
2 2022-03-23 08:00:00  Q122 Our Voice - CBS
3 2022-03-23 08:00:00  Q122 Our Voice - CBS
4 2022-03-23 08:00:00  Q122 Our Voice - CBS

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:39:04