我有一只熊猫的DateTime指数。数据间隔为5分钟。每一个我都有来自hellmann 降水计的降水数据。我所拥有的数据并没有以毫米表示实际降水量,而是显示了水位计中的水高度。因此,如果我想要每小时的降水数据,我需要检查该小时内的所有行,如果在当前和之前的测量值之间存在一个增量。如果是这样的话,就把它总结一下。但还有一个警告,如果水表中的水达到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倍以上,特别是当时间范围更大的时候。有谁知道从这样一个数据集中获取降水量之和的有效方法吗?
发布于 2014-07-06 01:50:11
您的所有三个条件都可以描述为一个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()
https://stackoverflow.com/questions/24590664
复制相似问题