Python 使用Pandas.diff()获取行差异的总和

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],

我正在做一个时间序列分析,我需要计算几个属性随时间的变化。熊猫使这个简单的版本变得容易;.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],
                     '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