Python 使用Pandas.diff()获取行差异的总和
我正在做一个时间序列分析,我需要计算几个属性随时间的变化。熊猫使这个简单的版本变得容易;.diff(periods=n)函数将计算一行与前面n行之间的差异,但是,这并不是我所需要的Python 使用Pandas.diff()获取行差异的总和,python,pandas,dataframe,time-series,Python,Pandas,Dataframe,Time Series,我正在做一个时间序列分析,我需要计算几个属性随时间的变化。熊猫使这个简单的版本变得容易;.diff(periods=n)函数将计算一行与前面n行之间的差异,但是,这并不是我所需要的 df= pd.DataFrame({'day_num': [134, 135, 136, 137], 'swe': [38.8, 38.9, 37.6, 36.8], 'prcp': [0., 0.1, 0., 0.15],
df= pd.DataFrame({'day_num': [134, 135, 136, 137],
'swe': [38.8, 38.9, 37.6, 36.8],
'prcp': [0., 0.1, 0., 0.15],
'flow': [2930, 3350, 3900, 4090]})
diff_3 = df.diff(periods=3)
返回:
day_num swe prcp flow
0 134 38.8 0.00 2930
1 135 38.9 0.00 3350
2 136 37.6 0.00 3900
3 137 36.8 0.15 4090
以及:
在swe列中(雪水当量英寸,字面上是特定积雪的液态水当量),指数3的3天差值为-2.0,等于36.8-38.8。但是,请注意,在3天的时间内有增加和减少。这意味着在这3天的窗口内,总共有2.1英寸(我的期望输出)的水融化并形成了水流(流动柱)。Min-max也不起作用,因为如果我将n值增加到7或14,很容易会出现输出中未考虑的“熔化”。所需要的是n天跨度内单日差异的总和。我最终希望将差异列合并回原始数据集中
任何想法都将不胜感激。另外,这是我的第一篇文章,所以请让我知道如何改进我的格式/内容
n天跨度内单日差异的总和
首先,diff
连续行,然后执行一次。由于diff
之后的序列在连续两行中已经存在差异,因此对于滚动求和,我们只提供period-1
(在本例中3-1=2
)
输出:
day_num swe prcp flow
0 134 NaN 0.00 2930
1 135 NaN 0.10 3350
2 136 -1.2 0.00 3900
3 137 -2.1 0.15 4090
day_num swe prcp flow swe_using_diff swe_using_rolling_sum
0 134 38.8 0.00 2930 NaN NaN
1 135 38.9 0.10 3350 NaN NaN
2 136 37.6 0.00 3900 -1.2 -1.2
3 137 36.8 0.15 4090 -2.1 -2.1
这也相当于执行以下操作,因为中间天数的贡献最终将抵消:
df['swe'] = df['swe'].diff(periods-1)
输出:
day_num swe prcp flow
0 134 NaN 0.00 2930
1 135 NaN 0.10 3350
2 136 -1.2 0.00 3900
3 137 -2.1 0.15 4090
day_num swe prcp flow swe_using_diff swe_using_rolling_sum
0 134 38.8 0.00 2930 NaN NaN
1 135 38.9 0.10 3350 NaN NaN
2 136 37.6 0.00 3900 -1.2 -1.2
3 137 36.8 0.15 4090 -2.1 -2.1