2017-02-22 11 views
1

フィルタリングされたセットのすべての行の平均よりも最後の3行の平均が大きいすべてのレコードを取得しようとしています。最後のN値の平均値によるパンダのデータフレームのフィルタリング

_filtered_d_all = _filtered_d.iloc[:, 0:50].loc[:, _filtered_d.mean()>0.05] 
_last_n_records = _filtered_d.tail(3) 

この

_filtered_growing = _filtered_d.iloc[:, 0:50].loc[:, _last_n_records.mean() > _filtered_d.mean()] 

のようなものはしかし、ここでの問題は、値の長さが間違っているということです。任意のヒント?

ValueError: Series lengths must match to compare 

サンプルデータ

これは年と月、2列にインデックスを持っています。

  Col1 Col2 
year month  
2005 12 0.533835 0.170679 
     12 0.494733 0.198347 
2006 3 0.440098 0.202240 
     6 0.410285 0.188421 
     9 0.502420 0.200188 
     12 0.522253 0.118680 
2007 3 0.378120 0.171192 
     6 0.431989 0.145158 
     9 0.612036 0.178097 
     12 0.519766 0.252196 
2008 3 0.547705 0.202163 
     6 0.560985 0.238591 
     9 0.617320 0.199537 
     12 0.343939 0.253855 
+0

データフレーム内の最後の3行または前の3行を意味します(つまり、5行目の場合は3,4,5の平均値にする必要があります)。 – RexFuzzle

+0

ええ、そうだよ df = [1、2、3、4、5、6、7] 最後の3つの値の平均がすべての値の平均よりも大きいかどうかを確認するアレイ(:)時系列的に理にかなっている) – Eamonn

答えて

1

マルチインデックス編集

同じshのための

df[df.tail(3).mean() > df.mean()] 

デモ

>>> df 
    0 1 2 3 4 
0 4 8 2 4 6 
1 0 0 0 2 8 
2 5 3 0 9 3 
3 7 5 5 1 2 
4 9 7 8 9 4 

>>> df[df.tail(3).mean() > df.mean()] 
    0 1 2 3 4 
0 4 8 2 4 6 
1 0 0 0 2 8 
2 5 3 0 9 3 
3 7 5 5 1 2 

更新例を使用してフィルタ処理DATAFRAMEに直接なぜだけではなく、ブール指標あなたのMultiIndexサンプルでうまくいけば、ちょっと違ったマスクをしなければなりません。

>>> df 
      col1  col2 
2005 12 -0.340088 -0.574140 
    12 -0.814014 0.430580 
2006 3 0.464008 0.438494 
    6 0.019508 -0.635128 
    9 0.622645 -0.824526 
    12 -1.674920 -1.027275 
2007 3 0.397133 0.659467 
    6 0.026170 -0.052063 
    9 0.835561 0.608067 
    12 0.736873 -0.613877 
2008 3 0.344781 -0.566392 
    6 -0.653290 -0.264992 
    9 0.080592 -0.548189 
    12 0.585642 1.149779 

>>> df.loc[:,df.tail(3).mean() > df.mean()] 
      col2 
2005 12 -0.574140 
    12 0.430580 
2006 3 0.438494 
    6 -0.635128 
    9 -0.824526 
    12 -1.027275 
2007 3 0.659467 
    6 -0.052063 
    9 0.608067 
    12 -0.613877 
2008 3 -0.566392 
    6 -0.264992 
    9 -0.548189 
    12 1.149779 
+0

同様の、しかし異なるエラーは現在与えられているものの: ---> 95 _filtered_growing = _filtered_d_all [_last_n_records> _filtered_d_all.mean()] とValueError:シリーズ長一致する必要があります – Eamonn

+0

@エモン '_last_n_records'の平均値を呼び出していません... – miradulo

+0

@エモン私の場合と同じように、_two_を比較する必要があります。 – miradulo

関連する問題