如何用今日日期减去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
补充说明:
apply方法会遍历DataFrame的每一列,对每个元素执行日期偏移计算,比逐单元格赋值效率高得多,数据量大时优势更明显。- 如果你需要保留
Name作为普通列而非索引,只需要去掉代码里的.set_index('Name'),最终结果的结构就会和你给出的示例完全一致。
内容的提问来源于stack exchange,提问作者Joel
相关产品推荐
相关产品推荐

