2017-11-08 5 views
1

"short_id"という名前の100以上のスケールに対して、パンダのデータフレームのtimeseriesウエイトがあります。私は異常値を除去するために各スケールの重量データに移動フィルターを適用する最善の方法を考え出すのに問題があります。 「short_id」あたりの辞書にデータフレームを変換し、うまくいかなかったdictの項目ごとにフィルタを適用する移動、また「ワイドにデータを変換しなかったインデックス付きカテゴリ変数ごとにデータフレームに移動平均列を追加する

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 

:ここ

は、データのサンプルです"(" pandas.pivot_table "を使用して)" long "からのフォーマット。

それは.applyローリング機能、その後groupy.byを使用して1行で可能かもしれないように思える:

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

が、エラー受信:TypeError例外:フレームインデックスと挿入された列の互換性のないインデックスを...これは、時々あるスケールのために同時に時々に重量データがあるが、通常はそうではないからである。

は、これが問題にアプローチするための最良の方法です?:

使用し、「short_id」ごとに新しいデータフレームを作成し、それは罰金

INT16['MovingFilt'] = pd.Series.rolling(INT16['weight'], window=6, center=True).median() 

答えて

0

を実行しますが、あなたが書いたため、エラーがあり、十分なニシキヘビではないようですthe groupby wrong

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

ありがとう、私は欠けている括弧と更新された投稿を追加しました。私は時々オーバーラップするタイムスタンプに問題があると思う – Evan

関連する問題