2017-02-22 129 views
1

我试图获得所有记录,其中最后3行的平均值大于筛选集合中所有行的总体平均值。通过最后N个值的平均值过滤Pandas Dataframe

_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 
为什么不只是布尔指数直接与

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 

更新例如,对于多指标编辑

同样SH您的过滤数据帧

+0

意味着数据框或前3行中的最后3行(即如果我在第5行,那么它应该是3,4和5的手段)? – RexFuzzle

+0

是的,所以你会有 df = [1,2,3,4,5,6,7] 你想知道最后3个值的平均值是否大于所有值的平均值阵列(有意义按时间序列:)) – Eamonn

回答

1

对于你的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

@Eamonn你不会在'_last_n_records'上调用平均值... – miradulo

+0

@Eamonn你需要比较_two_的意思,就像我在我的例子中所做的那样。 – miradulo