我有一个从传感器数据中获取的大数据表,如下所示:
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的描述
答案 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