将移动平均列添加到每个索引类别变量的数据框架

时间:2017-11-08 21:48:51

标签: python-2.7 pandas indexing

我有一个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()

1 个答案:

答案 0 :(得分:1)

错误是因为你写错了

df['MovingFilt'] = df.groupby('short_id')['weight'].rolling(6).median().values