python – 在pandas dataframe中将单个列向前移动几个日期

我想在以下数据帧中提前3天将列val中的所有值移动:

datetime    val val_b
12/20/2010      23
12/21/2010      12
12/22/2010  23  27
12/23/2010      26
12/24/2010      28
12/25/2010      17
12/26/2010      26
12/27/2010  21  14
12/28/2010      20
12/29/2010      18
12/30/2010  15  22
12/31/2010      20
1/1/2011        13
1/2/2011    12  30
1/3/2011        25
1/4/2011        15
1/5/2011        19
1/6/2011        14

我尝试使用pd.DateOffset函数,但是hat会提前移动所有列,我不希望这样.

最佳答案 首先创建DatetimeIndex,然后使用参数freq
shift

df['datetime'] = pd.to_datetime(df['datetime'])
df = df.set_index('datetime')

df['val'] = df['val'].shift(3, freq='d')
print (df)
             val  val_b
datetime               
2010-12-20   NaN     23
2010-12-21   NaN     12
2010-12-22   NaN     27
2010-12-23   NaN     26
2010-12-24   NaN     28
2010-12-25  23.0     17
2010-12-26   NaN     26
2010-12-27   NaN     14
2010-12-28   NaN     20
2010-12-29   NaN     18
2010-12-30  21.0     22
2010-12-31   NaN     20
2011-01-01   NaN     13
2011-01-02  15.0     30
2011-01-03   NaN     25
2011-01-04   NaN     15
2011-01-05  12.0     19
2011-01-06   NaN     14
点赞