gpt4 book ai didi

Python:Pandas:滚动窗口 - mean() 有效但 variance() 无效?

转载 作者:太空宇宙 更新时间:2023-11-04 05:28:42 25 4
gpt4 key购买 nike

我有以下以秒为单位记录的数据:http://pastebin.com/wBSJWYn2

我想以 1 分钟的间隔捕获各种夏季统计数据,如均值、方差等。所以我在 sensor_data.rolling(window=1,freq="1MIN") 上运行这些函数。在大多数情况下,它工作正常,但对于某些类型的功能,我无法克服两种类型的违规行为。具体来说,要么:

  1. 没有不完整分钟的输出 -- 它不会为不完整的 60 秒的分钟提供输出。 mean()、quantile()、sum()
  2. 就是这种情况
  3. 根本没有输出。对于 var()、std()、kurt()、skew() 等某些函数,我根本得不到任何值。我真的不明白为什么会这样,因为它能够计算平均值...

其他函数似乎没有问题:max()、median()、min()

我真的很关心第二个问题,但如果能找到第一个问题的解决方法也是一种奖励......


sensor_data.head()

x_acceleration y_acceleration z_acceleration heart_rate electrodermal_activity temperature
index
2016-05-16 06:58:44 -33.25000 -43.03125 33.09375 NaN 0.297099 33.33
2016-05-16 06:58:45 -28.15625 -52.90625 24.12500 NaN 0.219612 33.33
2016-05-16 06:58:46 -25.87500 -55.96875 21.18750 NaN 0.222648 33.33
2016-05-16 06:58:47 -24.00000 -57.46875 19.40625 NaN 0.217335 33.33
2016-05-16 06:58:48 -22.84375 -56.25000 23.40625 NaN 0.214300 33.33

第一种情况的示例输出——不完整的分钟没有输出:

sensor_data.rolling(window=1,freq="1MIN").mean().head()
x_acceleration y_acceleration z_acceleration heart_rate electrodermal_activity temperature
index
2016-05-16 06:58:00 NaN NaN NaN NaN NaN NaN
2016-05-16 06:59:00 -24.84375 -59.46875 9.03125 68.57 0.208988 33.75
2016-05-16 07:00:00 6.31250 -62.78125 6.46875 79.40 0.224924 33.84
2016-05-16 07:01:00 -21.18750 -57.00000 22.50000 92.00 0.224165 34.13
2016-05-16 07:02:00 -17.46875 -58.87500 21.84375 81.10 0.224165 34.25

第二种情况的示例输出——无输出:

sensor_data.rolling(window=1,freq="1MIN").var().head()

x_acceleration y_acceleration z_acceleration heart_rate electrodermal_activity temperature
index
2016-05-16 06:58:00 NaN NaN NaN NaN NaN NaN
2016-05-16 06:59:00 NaN NaN NaN NaN NaN NaN
2016-05-16 07:00:00 NaN NaN NaN NaN NaN NaN
2016-05-16 07:01:00 NaN NaN NaN NaN NaN NaN
2016-05-16 07:02:00 NaN NaN NaN NaN NaN NaN

最佳答案

对于初学者来说,这会让你开始。

sensor_data.groupby(pd.Grouper(level=0, freq='Min')).describe()

您可以构建自定义函数:

def stats(df):
kurt = pd.DataFrame(df.kurt(), columns=['kurt']).T
skew = pd.DataFrame(df.skew(), columns=['skew']).T
var = pd.DataFrame(df.var(), columns=['var']).T
return pd.concat([df.describe(), var, skew, kurt])

然后:

sensor_data.groupby(pd.Grouper(level=0, freq='Min')).apply(stats)

enter image description here


编辑:

合并了@Jeff 的评论:

funcs = {
'Count': 'count',
'Var': np.var,
'Std': np.std,
'Mean': np.mean,
'Min': np.min,
'25%': lambda x: x.quantile(.25),
'50%': np.median,
'75%': lambda x: x.quantile(.75),
'Max': np.max,
'Skew': 'skew',
'Kurt': lambda x: x.kurt(),
}

cols = sensor_data.columns

这是一个完整的函数列表。

sensor_data.groupby(pd.Grouper(level=0, freq='Min')).agg({c: funcs for c in cols}).stack()

看起来像:

enter image description here

时机

%%timeit
sensor_data.groupby(pd.Grouper(level=0, freq='Min')).agg({c: funcs for c in cols}).stack()

10 loops, best of 3: 121 ms per loop

%%timeit
sensor_data.groupby(pd.Grouper(level=0, freq='Min')).apply(stats).dropna()

1 loop, best of 3: 221 ms per loop

看起来 agg 的速度大约是原来的两倍。

关于Python:Pandas:滚动窗口 - mean() 有效但 variance() 无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37848021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com