我有一个DataFrame的示例,如下所示:
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
我想按“分组”列进行分组,计算最后2次出现并找到平均值,然后将其他列替换为其各自的值。
我知道,如果我只这样做:
df.groupby('Group').mean()
我将获得一个数据框,其中“组”为索引,其他列为列,它们的值是平均值,而不是最后2次出现的平均值。另外,替换有点儿麻烦。
我想得到:
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和调整性能。 谢谢您的帮助!
这是可以加载的数据的示例:
import pandas as pd
from io import StringIO
s = '''\
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
'''
df = pd.read_csv(StringIO(s))
答案 0 :(得分:3)
您可以在分组后使用滚动。所以在这里,我将使用:
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