我有一个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”将数据帧转换为字典,并且每个dict项目应用移动过滤器不起作用,也没有将数据从“long”转换为“宽”格式(使用pandas.pivot_table)。
似乎可以在一行中使用groupy。然后。应用滚动功能:
df['MovingFilt'] = df.groupby('short_id')['weight'].apply(pd.rolling(6).median())
但收到错误:TypeError:插入列的不兼容索引与帧索引...这是因为有时某些比例的重量数据同时存在,但通常不会。
这是解决问题的最佳方式吗?:
每个'short_id'创建新的数据帧然后使用似乎不够pythonic,虽然它运行良好
INT16['MovingFilt'] = pd.Series.rolling(INT16['weight'], window=6, center=True).median()
答案 0 :(得分:1)
错误是因为你写错了
df['MovingFilt'] = df.groupby('short_id')['weight'].rolling(6).median().values