在过滤的时间序列列中减去天数

时间:2017-09-15 15:12:56

标签: python pandas

我有以下数据框:

date           number
2016-01-20       1
2016-06-21       1
2012-05-6        1

我知道想要减去每个日期的10天,但仅限于那些小于2014年3月的日期。结果应如下所示:

date           number
2016-01-10       1
2016-06-11       1
2012-05-6        

我尝试了以下命令,但它根本不会更改列。有谁知道我在做错了什么?

df[df["date"].isin(pd.date_range("2014-02-01", "2018-01-01"))]["date"] = df[df["date"].isin(pd.date_range("2014-02-01", "2018-01-01"))]["date"] - pd.Timedelta(10, "D")

如果我只是运行此命令:

df[df["date"].isin(pd.date_range("2014-02-01", "2018-01-01"))]["date"] - pd.Timedelta(10, "D")

它正确地给了我过滤数据帧的减去日期。但是,我不知道如何映射这些然后回到过滤的原始日期列以替换未减去的日期。

1 个答案:

答案 0 :(得分:3)

您可以使用Series.where

Base

或者将df.date = df.date.where(df.date < '2014-03-01', df.date - pd.Timedelta(10, 'D')) df # date number #0 2016-01-10 1 #1 2016-06-11 1 #2 2012-05-06 1 布尔索引赋值一起使用:

loc