如何将扩展 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= 中的项目应用一个函数],然后是 A
和 B
组中的项目,最后是 A
到 C
组中的项目。
例如,如果函数是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
不存在,所以可能的解决方案是合计 counts
和 sum
,使用累积和和平均除法:
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
我想使用 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= 中的项目应用一个函数],然后是 A
和 B
组中的项目,最后是 A
到 C
组中的项目。
例如,如果函数是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
不存在,所以可能的解决方案是合计 counts
和 sum
,使用累积和和平均除法:
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