如何基于条件新增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
相关产品推荐
相关产品推荐

