Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Groupby与滚动平均_Python_Python 3.x_Pandas - Fatal编程技术网

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