如何将扩展 window 应用于 groupby 结果的名称?

How can I apply an expanding window to the names of groupby results?

我想使用 pandas 按一列对数据框进行分组,然后 运行 对这些组进行扩展 window 计算。想象一下以下数据框:

G Val
A 0
A 1
A 2
B 3
B 4
C 5 
C 6 
C 7

我正在寻找的是一种按列 G 对数据进行分组的方法(生成组 ['A', 'B', 'C']),然后首先对组 [=16= 中的项目应用一个函数],然后是 AB 组中的项目,最后是 AC 组中的项目。

例如,如果函数是sum,那么结果就是

A 3
B 10
C 28

对于我的问题,应用的函数需要能够访问数据框中的所有原始项目,而不仅仅是来自 groupby 的聚合。

例如,当应用 mean 时,预期结果将是

A 1
B 2
C 3.5

A: mean([0,1,2]), B: mean([0,1,2,3,4]), C: mean([0,1,2,3,4,5,6,7]).

cummean 不存在,所以可能的解决方案是合计 countssum,使用累积和和平均除法:

df = df.groupby('G')['Val'].agg(['size', 'sum']).cumsum()
s = df['sum'].div(df['size'])
print (s)
A    1.0
B    2.0
C    3.5
dtype: float64

如果需要通用解决方案,则可以提取扩展组,然后在字典理解中使用函数,如:

g = df['G'].drop_duplicates().apply(list).cumsum()

s = pd.Series({x[-1]: df.loc[df['G'].isin(x), 'Val'].mean() for x in g})
print (s)
A    1.0
B    2.0
C    3.5
dtype: float64