将移动平均列添加到每个索引类别变量的数据框
Posted
技术标签:
【中文标题】将移动平均列添加到每个索引类别变量的数据框【英文标题】:Adding moving average column to dataframe per indexed category variable 【发布时间】:2018-04-21 18:20:36 【问题描述】:我有一个 pandas 数据帧时间序列权重,用于 100 多个按“short_id”命名的尺度。我无法找出为每个秤的重量数据应用移动过滤器以去除异常值的最佳方法。
以下是数据示例:
Out[159]:
published_at short_id weight
0 2017-11-08 16:03:36 INT16 50.35
1 2017-11-08 16:02:43 INT1 45.71
2 2017-11-08 16:02:10 NOT11 35.52
3 2017-11-08 16:01:07 INT7 50.03
4 2017-11-08 16:00:23 INT3 47.04
将数据帧转换为每个“short_id”的字典并为每个字典项应用移动过滤器没有成功,也没有将数据从“long”转换为“宽”格式(使用 pandas.pivot_table)。
似乎可以在一行中使用 groupy.by then .apply 滚动功能:
df['MovingFilt'] = df.groupby('short_id')['weight'].apply(pd.rolling(6).median())
但收到错误:TypeError: incompatible index of inserted column with frame index...这是因为有时某些秤会同时存在权重数据,但通常不会。
这是解决问题的最佳方法吗?:
为每个 'short_id' 创建新的数据帧然后使用似乎不够 Pythonic,尽管它运行良好
INT16['MovingFilt'] = pd.Series.rolling(INT16['weight'], window=6, center=True).median()
【问题讨论】:
【参考方案1】:错误是因为你写错了groupby
df['MovingFilt'] = df.groupby('short_id')['weight'].rolling(6).median().values
【讨论】:
谢谢,我添加了缺少的括号并更新了帖子。我怀疑问题在于有时重叠的时间戳以上是关于将移动平均列添加到每个索引类别变量的数据框的主要内容,如果未能解决你的问题,请参考以下文章