我有一个如下所示的数据框:
>df
ID Value
---------------
1 1.0
1 2.0
1 3.0
1 4.0
2 6.0
2 7.0
2 8.0
3 2.0
我想在每个组的最后int(group size /2)
个记录的“value”字段上计算min/max/sum/mean/var
,而不是固定数量的记录
min/max/sum/mean/var
min/max/sum/mean/var
李>min/max/sum/mean/var
,因为它在组中只有一条记录李>所以输出应该是
Value
ID min max sum mean var
----------------------------------
1 3.0 4.0 7.0 3.5 0.5 # the last 4/2 rows for group with ID =1
2 7.0 7.0 7.0 7.0 0.5 # the last 3/2 rows for group with ID =2
3 2.0 2.0 2.0 2.0 Nan # the last 1 rows for group with ID =3
我正在考虑使用rolling
函数,如下所示:
df_group=df.groupby('ID')
.apply(lambda x: x \
.sort_values(by=['ID'])
.rolling(window=int(x.size/2),min_periods=1)
.agg({'Value':['min','max','sum','mean','var']})
.tail(1)
)
但结果如下
Value
min max sum mean var
ID
------------------------------------------------
1 3 1.0 4.0 10.0 2.5 1.666667
2 6 6.0 8.0 21.0 7.0 1.000000
3 7 2.0 2.0 2.0 2.0 NaN
看起来x码根本不起作用
有没有办法根据组大小设置滚动大小
一种可能的解决方案,包括:
按如下所示循环分组
结果
链接:
相关问题 更多 >
编程相关推荐