我试图获得所有记录,其中最后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您的过滤数据帧
意味着数据框或前3行中的最后3行(即如果我在第5行,那么它应该是3,4和5的手段)? – RexFuzzle
是的,所以你会有 df = [1,2,3,4,5,6,7] 你想知道最后3个值的平均值是否大于所有值的平均值阵列(有意义按时间序列:)) – Eamonn