【问题标题】:Sum of precipitation per Timeframe in pandas DataFramepandas DataFrame 中每个时间帧的降水量总和
【发布时间】:2014-07-06 09:55:53
【问题描述】:

我有一个带有 DateTime 索引的 pandas 数据框。数据间隔为 5 分钟。对于每个我都有来自 hellmann precipitation gauge 的降水数据。我所拥有的数据不是以毫米为单位的实际降水量,而是仪表中水的高度。因此,如果我想获得每小时的降水数据,我需要检查该小时内的所有行,如果当前测量值和上一次测量值之间存在增量。如果是这样总结一下。但还有一点需要注意的是,如果仪表中的水达到 100 毫米,仪表将自动排空,整个过程从头开始。

如果 tprep - (tprep-1) > 0 取增量

如果 tprep

如果 tprep = (tprep-1) 什么都不做

数据:

8:00 78
8:05 78
8:10 82
8:15 82
8:20 82
8:25 90
8:30 91
8:35 91
8:40 98
8:45  3
8:50  3
8:55  5

这应该会在这一小时内产生 27 毫米的降水。当然,它可能会在时间范围内跳跃数倍于 100,尤其是在时间范围较大的情况下。有谁知道从这样的数据集中获取降水总和的有效方法?

【问题讨论】:

  • 所有条件都可以描述为delta = (100 + tprep - (tprep-1)) mod 100

标签: python numpy pandas


【解决方案1】:

你的三个条件都可以描述为一个delta = (100 + tprep - (tprep-1)) mod 100
甚至是delta = (tprep - (tprep-1)) mod 100

import pandas as pd
from StringIO import StringIO

data = """8:00 78
8:05 78
8:10 82
8:15 82
8:20 82
8:25 90
8:30 91
8:35 91
8:40 98
8:45 3
8:50 3
8:55 5"""

df = pd.read_csv(StringIO(data), sep=' ' , header=None)

df[1] = df[1].apply(int)

现在我有 DataFrame 可以工作了

df['diff'] = df[1].diff()
df['diff_modulo'] = df['diff'].mod(100)

print df

.

       0   1  diff  diff_modulo
0   8:00  78   NaN          NaN
1   8:05  78     0            0
2   8:10  82     4            4
3   8:15  82     0            0
4   8:20  82     0            0
5   8:25  90     8            8
6   8:30  91     1            1
7   8:35  91     0            0
8   8:40  98     7            7
9   8:45   3   -95            5
10  8:50   3     0            0
11  8:55   5     2            2

.

print df['diff_modulo'].sum()

.

27.0

当然可以一键搞定

print df[1].diff().mod(100).sum()

【讨论】:

  • 这样一个简单的解决方案。太好了谢谢!不过还有一个问题。我有四个星期的数据和目前每小时的总降水量。这给了我很多小时的降水量为 0。问题是当我尝试绘制如此大的数据框时,pandas/matplotlib 试图同时绘制 0 值并且该图是无用的。你知道如何解决这个问题吗?我应该用 np.nan 替换所有 0 值吗?谢谢
  • 关于我的最后一个问题,用 nan 替换所有 0 值。 df['diff_modulo'][df['diff_modulo'] == 0] = np.nan 当然我是在重新采样数据帧后这样做的
猜你喜欢
  • 1970-01-01
  • 2020-05-06
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 2022-07-28
  • 1970-01-01
相关资源
最近更新 更多