我有以下数据框:
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")
它正确地给了我过滤数据帧的减去日期。但是,我不知道如何映射这些然后回到过滤的原始日期列以替换未减去的日期。
答案 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