2015-10-31 87 views
2

我有點卡在這一張上。我有一個dataframe,它有一個變量的樣本,每個變量都有一個時間戳。這些數據進行排序在增加時間順序:使用熊貓在連續的連續時間間隔內找到最小值

import pandas as pd 

dates = [#Continuous Block 
     pd.Timestamp('2012-05-03 09:00:01'), 
     pd.Timestamp('2012-05-03 09:00:02'), 
     pd.Timestamp('2012-05-03 09:00:03'), 
     pd.Timestamp('2012-05-03 09:00:04'), 
     #Non Continuous Block 
     pd.Timestamp('2012-05-03 16:00:00'), 
     pd.Timestamp('2012-05-03 17:00:04'), 
     #Continuous Block 
     pd.Timestamp('2012-05-03 18:00:01'), 
     pd.Timestamp('2012-05-03 18:00:02'), 
     pd.Timestamp('2012-05-03 18:00:03'), 
     #Non Continuous Block 
     pd.Timestamp('2012-05-03 19:00:03')]  


vars = [-0.105, -1.08, -1.08, -1.03, -1.0, -1.1, -0.15,-0.14,-0.13,-0.11] 
df = pd.DataFrame({'A' : vars}, index=dates) 

這給:

    A 
2012-05-03 09:00:01 -0.105 
2012-05-03 09:00:02 -1.080 
2012-05-03 09:00:03 -1.080 
2012-05-03 09:00:04 -1.030 
2012-05-03 16:00:00 -1.000 
2012-05-03 17:00:04 -1.100 
2012-05-03 18:00:01 -0.150 
2012-05-03 18:00:02 -0.140 
2012-05-03 18:00:03 -0.130 
2012-05-03 19:00:03 -0.110 

正如你可以看到有由一個二級分離往往連續項。我想在一組間隔1秒的時間戳內拉出A的最小值。所以在上面的例子中,運行一個函數應該給:

2012-05-03 09:00:03, -1.080 
2012-05-03 16:00:00, -1.000 
2012-05-03 17:00:04, -1.100 
2012-05-03 18:00:01, -0.150 
2012-05-03 19:00:03, -0.110 

感謝任何幫助!

+0

你會需要整個時間戳嗎? –

+0

我想記錄最低變量發生的時間。所以,是的。我不需要日期,只需要一天的時間,如果這有幫助的話? –

+0

雖然我需要在秒部分工作,但應該花一些時間來解決這個問題。 –

回答

1

我去這個被稱爲創建一個額外的列「時間」

df['Time'] = df.index 
df2 = df.groupby([df.index.hour]).apply(lambda x: x.min()) 
df2.reset_index(drop = True,inplace='True') 
print df2.head() 

給出:

 A    Time 
0 -1.08 2012-05-03 09:00:01 
1 -1.00 2012-05-03 16:00:00 
2 -1.10 2012-05-03 17:00:04 
3 -0.15 2012-05-03 18:00:01 
4 -0.11 2012-05-03 19:00:03 

如果你只需要組按小時,你就不會需要時間列,你需要按時間戳:

df2 = df.groupby([df.index.hour]).apply(lambda x: x.min()) 
print df2.head() 

與輸出爲:

 A 
9 -1.08 
16 -1.00 
17 -1.10 
18 -0.15 
19 -0.11 
+0

儘管 –

+0

這不是一個理想的方法嘿,太棒了!謝謝 –