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

如何用今日日期减去Pandas DataFrame值生成新DataFrame

用Pandas快速生成日期偏移后的DataFrame

针对你提出的需求,其实不需要手动逐个单元格赋值(就像你想到的df2.iloc[1,1]那种写法),Pandas的矢量化运算可以帮我们一次性完成整个DataFrame的计算,既简洁又高效。

先还原你的原始数据:

import pandas as pd

# 构建原始DataFrame
df = pd.DataFrame({
    'Name': ['D1', 'D2', 'D3'],
    'A': [1, 2, 2],
    'B': [3, 4, 1],
    'C': [3, 4, 1]
}).set_index('Name')

输出的原始DataFrame:

A  B  C
Name         
D1    1  3  3
D2    2  4  4
D3    2  1  1

完整解决方案代码:

from datetime import date, timedelta

# 定义今日日期(这里用你示例中的2018-04-27,实际可自动获取当前日期)
today = date(2018, 4, 27)
# 如果要自动取系统当前日期,替换成下面这行:
# today = date.today()

# 对整个数值列做矢量化运算:今日日期减去对应天数的时间差
result_df = df.apply(lambda x: today - timedelta(days=x))

# 查看最终结果
print(result_df)

输出结果:

A          B          C
Name                                   
D1     2018-04-26  2018-04-24  2018-04-24
D2     2018-04-25  2018-04-23  2018-04-23
D3     2018-04-25  2018-04-26  2018-04-26

补充说明:

  1. apply方法会遍历DataFrame的每一列,对每个元素执行日期偏移计算,比逐单元格赋值效率高得多,数据量大时优势更明显。
  2. 如果你需要保留Name作为普通列而非索引,只需要去掉代码里的.set_index('Name'),最终结果的结构就会和你给出的示例完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:09:39