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

如何在Pandas中通过函数基于现有日期列生成新日期列?

问题描述

现有如下代码:

import pandas as pd

file = pd.DataFrame()

file['CASH RECIEVED DATE'] = ['2018-07-23', '2019-09-26', '2017-05-02']

需要创建名为Cash Received Date的列,规则为:当CASH RECIEVED DATE不为空且小于等于2022-09-01时,赋值为2019-09-01,否则取原列值。预期输出的列值为:

['2019-09-01', '2019-09-26', '2019-09-01']

请问如何通过创建函数实现该需求?

解决方案

步骤1:转换日期列类型

原始数据是字符串格式,首先要把CASH RECIEVED DATE列转为pandas的datetime类型,才能正常进行日期比较:

file['CASH RECIEVED DATE'] = pd.to_datetime(file['CASH RECIEVED DATE'])

步骤2:编写自定义处理函数

创建一个函数,接收单个日期值,按照规则返回对应结果:

def process_cash_date(date_val):
    # 检查日期非空且符合条件
    if pd.notna(date_val) and date_val <= pd.to_datetime('2022-09-01'):
        return pd.to_datetime('2019-09-01')
    else:
        return date_val

步骤3:应用函数生成新列

用apply方法将函数作用于原日期列,生成目标列:

file['Cash Received Date'] = file['CASH RECIEVED DATE'].apply(process_cash_date)

完整可运行代码

import pandas as pd

file = pd.DataFrame()
file['CASH RECIEVED DATE'] = ['2018-07-23', '2019-09-26', '2017-05-02']

# 转换日期格式
file['CASH RECIEVED DATE'] = pd.to_datetime(file['CASH RECIEVED DATE'])

# 定义处理函数
def process_cash_date(date_val):
    if pd.notna(date_val) and date_val <= pd.to_datetime('2022-09-01'):
        return pd.to_datetime('2019-09-01')
    else:
        return date_val

# 生成目标列
file['Cash Received Date'] = file['CASH RECIEVED DATE'].apply(process_cash_date)

# 查看结果
print(file['Cash Received Date'])

运行后输出结果符合预期:

0   2019-09-01
1   2019-09-26
2   2019-09-01
Name: Cash Received Date, dtype: datetime64[ns]

补充:大数据集高效替代方案

如果数据集规模较大,apply方法效率偏低,可以用矢量化的numpy.where实现逻辑,速度更快:

import numpy as np

file['Cash Received Date'] = np.where(
    (pd.notna(file['CASH RECIEVED DATE'])) & (file['CASH RECIEVED DATE'] <= '2022-09-01'),
    '2019-09-01',
    file['CASH RECIEVED DATE']
)
# 若需保持datetime类型,可再转换一次
file['Cash Received Date'] = pd.to_datetime(file['Cash Received Date'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:50:46