我有一个包含2列的数据框'日期'和' Temp':
Temp
Date
2017-08-31 43.8532
2017-08-30 44.1702
2017-08-29 43.7581
2017-08-28 43.8680
2017-08-25 43.5181
2017-08-24 43.9274
2017-08-23 43.6600
2017-08-22 43.5773
2017-08-21 43.7247
2017-08-18 43.7179
2017-08-17 43.7072
2017-08-16 43.3215
2017-08-15 43.3597
2017-08-14 43.3082
2017-08-11 43.5351
2017-08-10 43.6848
... ...
31/08/2016 37.873
30/08/2016 38.6831
29/08/2016 38.7264
26/08/2016 39.1932
25/08/2016 39.1318
... ...
我希望创建2个新列&1; 1年差异'和' 1年std'
' 1年前差异'是相隔一年的两个日期之间的温度差异。
' 1年std'是过去一年的温度标准偏差。
手动计算前三个:
Date Temp 1 yr diff 1 yr std
31/08/2017 43.8532 5.9802 1.914
30/08/2017 44.1702 5.4871 1.909
29/08/2017 43.7581 5.0317 1.901
如何为所有行执行此操作?
答案 0 :(得分:1)
试一试:
one_year = pandas.offsets.Year(1)
df = (
df.assign(diff_1yr=df['Temp'] - df['Temp'].shift(freq=one_year))
.assign(std_1yr=df['Temp'].rolling(one_year).std())
)
答案 1 :(得分:1)
diff = df.Temp.resample('D').ffill().diff(365).rename('1 yr diff')
std = df.Temp.rolling('365D').std().rename('1 yr std')
pd.concat([df, diff, std], axis=1).dropna()
Temp 1 yr diff 1 yr std
Date
2017-06-30 0.467765 -0.421425 0.287502
2017-06-29 0.293493 -0.479262 0.288638
2017-06-28 0.089505 -0.080712 0.288987
2017-06-27 0.156842 -0.254886 0.288611
2017-06-26 0.061712 -0.286930 0.287945
2017-06-23 0.691029 0.623226 0.286886
2017-06-22 0.135094 -0.120836 0.287729
2017-06-21 0.597864 -0.286051 0.287270
2017-06-20 0.594055 0.008702 0.288266
2017-06-19 0.823582 0.509880 0.288254
...