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