【问题标题】:Calculating a cumulative deviation from mean monthly value in pandas series计算熊猫系列中月均值的累积偏差
【发布时间】:2014-01-14 23:44:01
【问题描述】:

如何使用 pandas 计算与月平均降雨量值的累积偏差?

我得到了每日降雨数据(例如 s,下面),我可以将其转换为 pd.Series 并重新采样成月度周期(总和;例如 sm,下面)。但是然后我想计算每个月值与当月平均值之间的差异。我添加了一个合成示例:

rng = pd.period_range(20010101, 20131231, freq='D')
s = pd.Series(np.random.normal(2.5,2,size=len(rng)), index=rng)
sm = s.resample('M', how='sum')

例如,对于 2010 年 1 月,我想计算该月的值与 1 月的平均月降雨量之间的差异(在很长一段时间内)。然后我想要该差异的累积总和。

我尝试过使用 groupby 功能:

sm.groupby(lambda x: x.month).mean()

但没有成功。我希望“sm”中的每个月值都减去所有相似月份的平均值,然后创建该系列的累积总和。我猜这可能是一步。

我怎样才能有效地做到这一点?
谢谢

【问题讨论】:

  • 你能用一些数据和你尝试的方法展示一些示例代码吗?
  • 当你用总和和平均值重新采样时..
  • 我认为@DanAllan 的答案对你想要的是正确的。试试sm.groupby(sm.index.month).transform(lambda x: x - x.mean()).cumsum().plot()。它将减去该组中每个值的所有相似月份的平均值,然后按照您的要求获取它的累积总和。
  • 太棒了。是的,这行得通。我只需要找出原因!感谢这两个答案。

标签: python pandas series


【解决方案1】:

这与an example in the docs 密切相关。这是未经测试的代码,但你想要这样的东西:

monthly_rainfall = daily_rainfall.resample('D', how=np.sum)

将所有年份中的所有一月组合在一起(每个月依此类推):

grouped = monthly_rainfall.groupby(lambda x: x.month)

然后

deviation = grouped.transform(lambda x: x - x.mean())
deviation.cumsum()

【讨论】:

  • 谢谢。我在文档中看到了这个例子,它接近我想要的,但不完全是。我已经用示例代码澄清了我的问题。
  • 是的,我已经尝试过了,确实有效。我误解了转换功能。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-18
  • 2022-01-17
  • 2017-08-13
  • 1970-01-01
  • 2012-06-19
相关资源
最近更新 更多