2014-07-05 108 views
1

我有一個帶有DateTime索引的熊貓數據框。數據間隔爲5分鐘。對於每個我有來自hellmann precipitation gauge降水數據。我所掌握的數據並沒有顯示實際的降水量,而是以毫米爲單位顯示的,但是儀表中的水的高度。因此,如果我想獲得小時降水數據,那麼如果當前測量值與之前測量值之間存在差異,則需要檢查該小時內的所有行。如果這樣總結起來。但還有一點需要注意,如果儀表內的水達到100毫米,儀表將自動清空,整個過程從頭開始。大熊貓的每個時間幀的降水量總和DataFrame

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

如果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

所有條件都可以被描述爲',δ=(100 + tprep - (tprep-1))模100' – furas

回答

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) 

現在我有數據框中工作

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

這樣的簡單的解決方案。太好了謝謝!還有一個問題。我有四個星期的數據和目前按小時計算的降水量。這給了我很多小時,0降水。問題是當我嘗試繪製一個大型數據框作爲條形圖時,pandas/matplotlib試圖繪製0值並且繪圖是無用的。你有一個想法如何解決這個問題?我應該用np.nan替換所有的0值嗎?謝謝 –

+1

關於我最後一個問題,用nan作品取代所有0值。 df ['diff_modulo'] [df ['diff_modulo'] == 0] = np.nan當然,我在重新採樣數據幀後 –