2013-08-22 53 views
4

我使用熊貓Timegrouper到組數據點的熊貓數據幀在python大熊貓重疊組:創建timegrouper

grouped = data.groupby(pd.TimeGrouper('30S')) 

我想知道如果有一種方式來實現窗口重疊,如建議在這個問題上:Window overlap in Pandas,同時保持熊貓數據幀爲數據結構。

更新:三個解決方案的測試時間如下建議和滾動平均值似乎更快:

%timeit df.groupby(pd.TimeGrouper('30s',closed='right')).mean() 
%timeit df.resample('30s',how='mean',closed='right') 
%timeit pd.rolling_mean(df,window=30).iloc[29::30] 

產量:

1000 loops, best of 3: 336 µs per loop 
1000 loops, best of 3: 349 µs per loop 
1000 loops, best of 3: 199 µs per loop 

回答

4

創建恰好3×30秒長的一些數據

In [51]: df = DataFrame(randn(90,2),columns=list('AB'),index=date_range('20130101 9:01:01',freq='s',periods=90)) 

以這種方式使用TimeGrouper相當於重採樣(這是重採樣實際做的) 請注意,我用closed確保正好是30的意見,包括

In [57]: df.groupby(pd.TimeGrouper('30s',closed='right')).mean() 
Out[57]: 
          A   B 
2013-01-01 09:01:00 -0.214968 -0.162200 
2013-01-01 09:01:30 -0.090708 -0.021484 
2013-01-01 09:02:00 -0.160335 -0.135074 

In [52]: df.resample('30s',how='mean',closed='right') 
Out[52]: 
          A   B 
2013-01-01 09:01:00 -0.214968 -0.162200 
2013-01-01 09:01:30 -0.090708 -0.021484 
2013-01-01 09:02:00 -0.160335 -0.135074 

這也是等價的,如果你再挑選出30秒間隔

In [55]: pd.rolling_mean(df,window=30).iloc[28:40] 
Out[55]: 
          A   B 
2013-01-01 09:01:29  NaN  NaN 
2013-01-01 09:01:30 -0.214968 -0.162200 
2013-01-01 09:01:31 -0.150401 -0.180492 
2013-01-01 09:01:32 -0.160755 -0.142534 
2013-01-01 09:01:33 -0.114918 -0.181424 
2013-01-01 09:01:34 -0.098945 -0.221110 
2013-01-01 09:01:35 -0.052450 -0.169884 
2013-01-01 09:01:36 -0.011172 -0.185132 
2013-01-01 09:01:37 0.100843 -0.178179 
2013-01-01 09:01:38 0.062554 -0.097637 
2013-01-01 09:01:39 0.048834 -0.065808 
2013-01-01 09:01:40 0.003585 -0.059181 

所以,這取決於你想要達到的目標,它很容易做一個重疊,通過使用rolling_mean ,然後挑出你想要的任何'頻率'。例如,這是一個5s的重複採樣,間隔30s。

In [61]: pd.rolling_mean(df,window=30)[9::5] 
Out[61]: 
          A   B 
2013-01-01 09:01:10  NaN  NaN 
2013-01-01 09:01:15  NaN  NaN 
2013-01-01 09:01:20  NaN  NaN 
2013-01-01 09:01:25  NaN  NaN 
2013-01-01 09:01:30 -0.214968 -0.162200 
2013-01-01 09:01:35 -0.052450 -0.169884 
2013-01-01 09:01:40 0.003585 -0.059181 
2013-01-01 09:01:45 -0.055886 -0.111228 
2013-01-01 09:01:50 -0.110191 -0.045032 
2013-01-01 09:01:55 0.093662 -0.036177 
2013-01-01 09:02:00 -0.090708 -0.021484 
2013-01-01 09:02:05 -0.286759 0.020365 
2013-01-01 09:02:10 -0.273221 -0.073886 
2013-01-01 09:02:15 -0.222720 -0.038865 
2013-01-01 09:02:20 -0.175630 0.001389 
2013-01-01 09:02:25 -0.301671 -0.025603 
2013-01-01 09:02:30 -0.160335 -0.135074 
+0

謝謝!如果你不想在滾動重疊窗口中應用滾動平均值而是任意函數呢? 我使用時間石斑的原因是提取組,然後分別查看每個組。 – Fra

+2

您可以使用rolling_apply的任意滾動功能以及任意功能 – Jeff

+1

謝謝! 'rolling_apply'回答我的問題 – Fra