【问题标题】:De-Cumulating Time Series Data in a Pandas Series对 Pandas 系列中的时间序列数据进行反累积
【发布时间】:2018-07-20 16:12:12
【问题描述】:

我有几个月度、日期时间索引的累积 Pandas 系列,我想对它们进行反累积,这样我就可以自己获取特定月份的值。

因此,对于每一年,一月是一月,二月是一月+二月,三月是一月+二月+三月,依此类推,直到下一年再次从一月开始。

尴尬的是,这些系列中的一些从二月开始。

这是一个示例系列:

2016-02-29     112.3
2016-03-31     243.0
2016-04-30     360.1
2016-05-31     479.5
2016-06-30     643.0
2016-07-31     757.6
2016-08-31     874.5
2016-09-30    1051.8
2016-10-31    1203.4
2016-11-30    1358.3
2016-12-31    1573.5
2017-01-31      75.0
2017-02-28     140.5
2017-03-31     290.4
2017-04-30     416.6
2017-05-31     548.2
2017-06-30     746.6
2017-07-31     863.5
2017-08-31     985.4
2017-09-30    1160.1
2017-10-31    1302.5
2017-11-30    1465.7
2017-12-31    1694.1
2018-01-31      74.0
2018-02-28     146.3
2018-03-31     300.9
2018-04-30     421.9
2018-05-31     564.1
2018-06-30     771.4

我认为一种方法是使用 df.diff() 来获取除 Jan 之外的所有内容的大部分差异,用 NaN 替换不正确的 Jan 值,然后执行 df.update(original df) 来填写具有正确值的 NaN。

我在尝试用 NaN 替换 Jan 数据时遇到问题。任何人都可以帮助解决这个问题或提出其他解决方案吗?

【问题讨论】:

  • 发布您的代码。

标签: python pandas time-series


【解决方案1】:

我会用groupby + diff + fillna 解决这个问题:

df.asfreq('M').groupby(pd.Grouper(freq='Y')).diff().fillna(df)

            Value
2016-02-29  112.3
2016-03-31  130.7
2016-04-30  117.1
2016-05-31  119.4
2016-06-30  163.5
2016-07-31  114.6
2016-08-31  116.9
2016-09-30  177.3
2016-10-31  151.6
2016-11-30  154.9
2016-12-31  215.2
2017-01-31   75.0
2017-02-28   65.5
2017-03-31  149.9
2017-04-30  126.2
2017-05-31  131.6
2017-06-30  198.4
2017-07-31  116.9
2017-08-31  121.9
2017-09-30  174.7
2017-10-31  142.4
2017-11-30  163.2
2017-12-31  228.4
2018-01-31   74.0
2018-02-28   72.3
2018-03-31  154.6
2018-04-30  121.0
2018-05-31  142.2
2018-06-30  207.3

假设索引为日期列,“值”为浮点数。

【讨论】:

  • 感谢您的回复 - 以上唯一的问题是 Jan 值应该代表原始数据系列中的值。所以 2017-01-31 应该是 75.0 等。我要么需要将 Jan 设置为 NaN,然后​​再用原件更新(通过 df.update() ),或者直接用原件替换上面的 Jan 值。
  • @coldspeed 快速提问,您如何加载虚拟数据来测试您的解决方案?
  • @kowpow 抱歉,再试一次?
  • @kowpow 没问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-29
  • 1970-01-01
  • 2019-09-11
  • 1970-01-01
  • 2019-11-27
  • 2015-12-19
  • 2021-05-12
相关资源
最近更新 更多