这是我的df:ts是时间戳,索引. x1是值
x1
ts
2017-09-01 17:22:42 7.0
2017-09-01 17:22:53 11.0
2017-09-01 17:23:04 9.0
2017-09-02 17:23:15 15.0
2017-09-03 17:23:26 13.0
2017-09-03 17:23:38 19.0
2017-09-03 17:23:49 13.0
2017-09-04 17:24:00 15.0
我想要一个等于昨天的价值列意味着今天的意思:
x1 result
ts
2017-09-01 17:22:42 7.0 (7+11+9) /3
2017-09-01 17:22:53 11.0 (7+11+9) /3
2017-09-01 17:23:04 9.0 (7+11+9) /3
2017-09-02 17:23:15 15.0 (7+11+9) /3 + 15/1
2017-09-03 17:23:26 13.0 15/1 + (13+19+13)/3
2017-09-03 17:23:38 19.0 15/1 + (13+19+13)/3
2017-09-03 17:23:49 13.0 15/1 + (13+19+13)/3
2017-09-04 17:24:00 15.0 15/1 + (13+19+13)/3
如果没有昨天的数据则使用0
最佳答案 使用
pd.merge_asof
,
pd.DataFrame.resample
和
pd.DataFrame.rolling
pd.merge_asof(
df,
df.resample('D').mean().rolling(2, 1).sum().rename(columns={'x1': 'result'}),
left_index=True, right_index=True
)
x1 result
ts
2017-09-01 17:22:42 7.0 9.0
2017-09-01 17:22:53 11.0 9.0
2017-09-01 17:23:04 9.0 9.0
2017-09-02 17:23:15 15.0 24.0
2017-09-03 17:23:26 13.0 30.0
2017-09-03 17:23:38 19.0 30.0
2017-09-03 17:23:49 13.0 30.0
2017-09-04 17:24:00 15.0 30.0