pandas DataFrame中每个时间帧的降水量总和

时间:2014-07-05 21:19:51

标签: python numpy pandas

我有一个带有DateTime索引的pandas Dataframe。数据的间隔为5分钟。对于每一个我都有来自hellmann precipitation gauge的降水数据。我所获得的数据并未显示以mm为单位的实际降水量,而是显示水位计中的水位高度。因此,如果我想要每小时降水数据,我需要检查当前和之前测量之间的增量之间的所有行。如果这样总结了。但还有一点需要注意,如果压力表中的水达到100毫米,压力表将自动清空,整个过程从头开始。

  

如果tprep - (tprep-1)> 0取delta

     

如果tprep< (tprep-1)取100 - (tprep-1)+ 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次,特别是如果时间范围更大。有谁知道从这样的数据集中获得降水总和的有效方法?

1 个答案:

答案 0 :(得分: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()