pandas groupby 中的分位数阈值/过滤器

Bra*_*mon 2 python pandas split-apply-combine pandas-groupby

我有一个分类变量和两个数字列:

np.random.seed(123)    
df = pd.DataFrame({'group' : ['a']*10+['b']*10,
                   'var1' : np.random.randn(20),
                   'var2' : np.random.randint(10,size=20)})
Run Code Online (Sandbox Code Playgroud)

我想通过 找到过滤后group的平均值,var1按 group限制df到前四分位var2数值。也就是说,每个组的阈值是:

thresh = df.groupby('group')['var2'].quantile(0.75)
Run Code Online (Sandbox Code Playgroud)

这是我想要结束的一个循环演示:

for group, frame in df.groupby('group'):
    print(frame[frame.var2 >= frame.var2.quantile(0.75)].var1.mean())
# -1.4713362407192072
# 0.15512098976530683
Run Code Online (Sandbox Code Playgroud)

结果应该是一个带有 ( group, var) 列的 DataFrame或一个由 索引的系列group。我相信解决方案可能涉及.transform/.apply但被困在那里。