使用Panadas

时间:2018-02-02 20:50:55

标签: python pandas dataframe scipy signal-processing

我有一个从传感器数据中获取的大数据表,如下所示:

    Code                             A1    A2  A3 ... AB40
    Time
2000-01-01 00:00:10.730              NaN   1   NaN    NaN
2010-01-01 00:00:12.730              1     2   3      NaN

有一段时间,没有可用的数据与设备关闭的时间有关。我想每隔一小时汇总一次数据。 我使用了以下代码:

telemetry_mean=pd.pivot_table(Telemetry,  index='Time').resample('1H').mean().dropna(how='all')
telemetry_mean=pd.pivot_table(Telemetry,  index='Time').resample('1H').std().dropna(how='all')
    # renaming the columns 
telemetry_mean.columns = [i + 'mean_5T' for i in list(telemetry_mean)]
telemetry_std.columns = [i + 'Std_5T' for i in list(telemetry_std)]
telemetry_feat = pd.concat([ telemetry_mean,   telemetry_std]

我无法应用相同的方法来获得基于给定时间窗口的信号的偏斜度量或峰度度量,并得到不同的结构:

telemetry_Skew=pd.pivot_table(Telemetry,  index='Time').resample('1H').skew().dropna(how='all')

输出

Code
A1                                 0.762252
A2                                 0.021107
A3                                 -1.035745
A4                                  0.578501

我在这里缺少什么?

我也想知道在一次推荐数据时是否有更优雅的方法来计算所有这些统计指标(由于数据的大性质)。所以例如而是使用`telemetry_Skew = pd.pivot_table(遥测,索引='时间')。重新采样(' 1H')。skew()。dropna(how =' all' ;)对于每个统计数据,我可以表示,std和...在一个数据引用中。

如果有人能帮助我,我感激不尽。

由于

更新

我正在寻找的输出采用这种格式

                                     A1                A2      ........ AB40      
    Time                           mean std skew  mean std skew
2000-01-01 00:00:00.00             1    2    0    2    1    9
.
.
.
2010-01-01 00:01:00.00              1   2    3    1    0    1

我随机填写了平均值,std,skew的描述

1 个答案:

答案 0 :(得分:2)

你可以尝试这样的事情。 这听起来更简单,但我不确定它是否符合您的需求。

# setting the time as index
df = df.set_index('Time')
# grouping by hour
grouped = df.groupby(df.index.hour)
# computing various stats
grouped = grouped.agg(['std', 'mean', 'skew']).transpose().unstack()
# cosmetics dropping a useless column level
grouped.columns = grouped.columns.droplevel()

grouped

#            std  mean  skew
# A1         NaN   1.0   NaN
# A2    0.707107   1.5   NaN
# A3         NaN   3.0   NaN
# AB40       NaN   NaN   NaN

替代

从pandas 0.20开始,您可以直接在agg上使用DataFrame来计算各种统计数据。详见here。 值得考虑一下你要做的事情。

df.agg(['std', 'mean', 'skew']).transpose()

#            std  mean  skew
# A1         NaN   1.0   NaN
# A2    0.707107   1.5   NaN
# A3         NaN   3.0   NaN
# AB40       NaN   NaN   NaN