2016-07-14 597 views
3

我有,看起来像传感器收集的数据:利用时间序列数据来计算均值,方差标准方差

sec nanosec value 

1001 1  0.2 

1001 2  0.2 

1001 3  0.2 

1002 1  0.1 

1002 2  0.2 

1002 3  0.1 

1003 1  0.2 

1003 2  0.2 

1003 3  0.1 

1004 1  0.2 

1004 2  0.2 

1004 3  0.2 

1004 4  0.1 

我想计算average,std deviation和其他一些统计像最大值,最小值为列每2秒。 所以平均水平(1001,1002)= 0.167,中(1003,1004)= 0.17

从教程http://earthpy.org/pandas-basics.html平均,我想我应该把它转换成时间序列和使用滚动从熊猫_means,但我新的时间序列数据,所以我不确定这是否是正确的方法。 另外,如何在此指定转换频率,因为第一秒的观测值观测值较少。所以对于实际数据,我有1001秒的100个读数,然后1002秒的100个观测值。

我还可以做秒的简单GROUPBY但它每秒钟组读数,不是每2秒钟,然后我怎么能结合观察从GROUPBY连续2个组,然后做分析。

回答

2

我觉得你可以先转换柱secto_timedeltaset_indexresample通过2 seconds2S):

df['sec'] = pd.to_timedelta(df.sec, unit='s') 
df.set_index('sec', inplace=True) 
print (df) 
      nanosec value 
sec      
00:16:41  1 0.2 
00:16:41  2 0.2 
00:16:41  3 0.2 
00:16:42  1 0.1 
00:16:42  2 0.2 
00:16:42  3 0.1 
00:16:43  1 0.2 
00:16:43  2 0.2 
00:16:43  3 0.1 
00:16:44  1 0.2 
00:16:44  2 0.2 
00:16:44  3 0.2 
00:16:44  4 0.1 
print (df.value.resample('2S').mean()) 
sec 
00:16:41 0.166667 
00:16:43 0.171429 
00:16:45   NaN 
Freq: 2S, Name: value, dtype: float64 

print (df.value.resample('2S').std()) 
sec 
00:16:41 0.051640 
00:16:43 0.048795 
00:16:45   NaN 
Freq: 2S, Name: value, dtype: float64 

print (df.value.resample('2S').max()) 
sec 
00:16:41 0.2 
00:16:43 0.2 
00:16:45 NaN 
Freq: 2S, Name: value, dtype: float64 

也许你需要在resample改变base

print (df.value.resample('2S', base=1).mean()) 
sec 
00:16:42 0.166667 
00:16:44 0.171429 
00:16:46   NaN 
Freq: 2S, Name: value, dtype: float64 

print (df.value.resample('2S', base=1).std()) 
sec 
00:16:42 0.051640 
00:16:44 0.048795 
00:16:46   NaN 
Freq: 2S, Name: value, dtype: float64 

print (df.value.resample('2S', base=1).max()) 
sec 
00:16:42 0.2 
00:16:44 0.2 
00:16:46 NaN 
Freq: 2S, Name: value, dtype: float64 
print (df.value.resample('2S', base=2).mean()) 
sec 
00:16:43 0.166667 
00:16:45 0.171429 
00:16:47   NaN 
Freq: 2S, Name: value, dtype: float64 

print (df.value.resample('2S', base=2).std()) 
sec 
00:16:43 0.051640 
00:16:45 0.048795 
00:16:47   NaN 
Freq: 2S, Name: value, dtype: float64 

print (df.value.resample('2S', base=2).max()) 
sec 
00:16:43 0.2 
00:16:45 0.2 
00:16:47 NaN 
Freq: 2S, Name: value, dtype: float64 
+0

我认为这会工作,但我得到一个警告尝试使用的.loc [ROW_INDEX,col_indexer] =值代替 DF1 [ 'header_stamp_secs'] = pd.to_timedelta(df1.header_stam p_secs,unit ='s')。这后面跟一个错误只对DatetimeIndex或PeriodIndex有效 – AMisra

+0

有趣。你的熊猫版本是什么? – jezrael

+0

我使用熊猫0.13.1 – AMisra

1

借款jezrael的代码设置的事情了:

df['sec'] = pd.to_timedelta(df.sec, unit='s') 
df.set_index('sec', inplace=True) 
print (df) 
      nanosec value 
sec      
00:16:41  1 0.2 
00:16:41  2 0.2 
00:16:41  3 0.2 
00:16:42  1 0.1 
00:16:42  2 0.2 
00:16:42  3 0.1 
00:16:43  1 0.2 
00:16:43  2 0.2 
00:16:43  3 0.1 
00:16:44  1 0.2 
00:16:44  2 0.2 
00:16:44  3 0.2 
00:16:44  4 0.1 

使用pd.TimeGrouper('2S')describe()

df.groupby(pd.TimeGrouper('2S')).describe() 

enter image description here