我想在以下数据帧中提前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