繁体   English   中英

如何使用熊猫数据框计算时间序列中的每月变化

[英]How to calculate monthly changes in a time series using pandas dataframe

由于我是 Python 新手,所以我可能要求对你们大多数人来说一些基本的东西。 但是,我有一个 df,其中“日期”是索引,另一列返回与日期相关的月份,还有一个数据列。

            Mnth    TSData
Date
2012-01-05     1  192.6257
2012-01-12     1  194.2714
2012-01-19     1  192.0086
2012-01-26     1  186.9729
2012-02-02     2  183.7700
2012-02-09     2  178.2343
2012-02-16     2  172.3429
2012-02-23     2  171.7800
2012-03-01     3  169.6300
2012-03-08     3  168.7386
2012-03-15     3  167.1700
2012-03-22     3  165.9543
2012-03-29     3  165.0771
2012-04-05     4  164.6371
2012-04-12     4  164.6500
2012-04-19     4  166.9171
2012-04-26     4  166.4514
2012-05-03     5  166.3657
2012-05-10     5  168.2543
2012-05-17     5  176.8271
2012-05-24     5  179.1971
2012-05-31     5  183.7120
2012-06-07     6  195.1286

我希望计算数据集的每月变化,以便以后在箱线图中使用。 因此,从上表中我寻求的结果是:

     Mnth               Chng
1    -8,9  (183,77 - 192,66)
2  -14,14  (169,63 - 183,77)
3      -5  (164,63 - 169,63)
4    1,73  (166,36 - 164,63)
5   28,77  (195,13 - 166,36)  

等等...

有什么建议么?

谢谢 :)

IIUC,从此开始为df

          Date  Mnth    TSData
0   2012-01-05     1  192.6257
1   2012-01-12     1  194.2714
2   2012-01-19     1  192.0086
3   2012-01-26     1  186.9729
4   2012-02-02     2  183.7700
...
20  2012-05-24     5  179.1971
21  2012-05-31     5  183.7120
22  2012-06-07     6  195.1286

您可以使用:

df.groupby('Mnth')['TSData'].first().diff().shift(-1)

# or 
# -df.groupby('Mnth')['TSData'].first().diff(-1)

注意。 必须按日期对数据进行排序,以便在计算中使用所需的日期作为每个组的第一项( df.sort_values(by=['Mnth', 'Date'])

输出:

Mnth
1    -8.8557
2   -14.1400
3    -4.9929
4     1.7286
5    28.7629
6        NaN
Name: TSData, dtype: float64
  1. 我将验证我们是否有一个datetime时间索引:
df.index = pd.to_datetime(df.index)
  1. 然后只需使用resample即可:
df['TSData'].resample('M').first().diff().shift(freq='-1M')

输出:

Date
2011-12-31        NaN
2012-01-31    -8.8557
2012-02-29   -14.1400
2012-03-31    -4.9929
2012-04-30     1.7286
2012-05-31    28.7629
Name: TSData, dtype: float64

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM