Python Groupby与滚动平均
我有一个数据帧示例,如下所示:Python Groupby与滚动平均,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个数据帧示例,如下所示: Group Col_A Col_B Col_C A 1 1 10 B 5 7 9 C 3 5 3 A 2 2 2 B 1 5 9 C 7 7
Group Col_A Col_B Col_C
A 1 1 10
B 5 7 9
C 3 5 3
A 2 2 2
B 1 5 9
C 7 7 7
A 50 100 100
我想按“group”列分组,计算最后2次出现的次数并找到平均值,然后用其各自的值替换其他列
我知道,如果我只做:
df.groupby('Group').mean()
我将得到一个数据帧,其中“Group”作为索引,其他列作为列,它们的值是平均值,而不是最后两次出现的平均值。另外,替换有点扭曲
我想得到:
Group Col_A Col_B Col_C
A 1 1 10
B 5 7 9
C 3 5 3
A 1.5 1.5 6
B 3 6 9
C 5 6 10
A 26 51 51
它显然需要高级的groupby操作和性能调整。
谢谢你的帮助
下面是一个可以加载的数据示例:
将熊猫作为pd导入
从io导入StringIO
s='''\
小组,A组,B组,C组
A、 1,1,10
B、 5,7,9
C、 3,5,3
A、 2,2,2
B、 1,5,9
C、 7,7,7
A、 50100100
'''
df=pd.read_csv(字符串)
您可以在groupby之后使用滚动。在这里,我将使用:
df.groupby('Group').rolling(2, min_periods=1).mean().reset_index(level=0).sort_index()
正如预期的那样:
Group Col_A Col_B Col_C
0 A 1.0 1.0 10.0
1 B 5.0 7.0 9.0
2 C 3.0 5.0 3.0
3 A 1.5 1.5 6.0
4 B 3.0 6.0 9.0
5 C 5.0 6.0 5.0
6 A 26.0 51.0 51.0
您可以在groupby之后使用滚动。在这里,我将使用:
df.groupby('Group').rolling(2, min_periods=1).mean().reset_index(level=0).sort_index()
正如预期的那样:
Group Col_A Col_B Col_C
0 A 1.0 1.0 10.0
1 B 5.0 7.0 9.0
2 C 3.0 5.0 3.0
3 A 1.5 1.5 6.0
4 B 3.0 6.0 9.0
5 C 5.0 6.0 5.0
6 A 26.0 51.0 51.0