从今天开始减去pandas Dataframe值

Joe*_*oel 2 python dataframe pandas

我有一个如下所示的数据框:

Name  A    B    C
D1    1    3    3
D2    2    4    4
D3    2    1    1
Run Code Online (Sandbox Code Playgroud)

如何创建一个相同大小的新数据框,其中每个值都是今天的日期减去我的第一个数据帧的值?

例如,如果今天是2018-04-27,我的新数据框将如下所示:

Name  A             B             C  
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
Run Code Online (Sandbox Code Playgroud)

我认为解决方案将包括类似的东西

df2.iloc[1,1] = datetime.today() - timedelta(days=df1[1,1])
Run Code Online (Sandbox Code Playgroud)

但我遇到了各种类型的错误和循环原始df的问题

W S*_*vis 8

import datetime as dt
from datetime import timedelta
import pandas as pd

df = pd.DataFrame({'Name':['D1','D2','D3'],'A':[1,2,2],'B':[3,4,1],'C':[3,4,1]})
df.set_index('Name', inplace=True)
df2 = df.applymap(lambda x: dt.date.today() - timedelta(days = x))

df2 
                   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
Run Code Online (Sandbox Code Playgroud)

Applymap是你想要使用的

编辑:让你避免与日期时间进口问题所看到增加进口这里

  • 太好了!如果你想避免导入`datetime`,你也可以使用这个lambda:`lambda x:pd.to_datetime('today') - pd.to_timedelta(str(x)+'d'))` (2认同)