首页 > 解决方案 > Pandas 过滤分组数据并聚合

问题描述

我想将数据分组DataFrame,过滤掉每组中的异常值(例如分位数(0.95)),然后汇总每组的结果。

我试着这样做:

import pandas as pd
import numpy as np

dff = pd.DataFrame({"A": np.arange(8), "B": list("aabbbbcc")})
group = dff.groupby(["B"])
print(group.mean())
group1 = group.apply(lambda g: g[g["A"] < g["A"].quantile(0.95)])

print("-------")
print(group1.mean())

但是,它似乎没有做正确的事情,因为group1对象实际上不是DataFrameGroupBy对象group。我找不到任何返回过滤DataFrameGroupBy对象的函数

标签: pythonpandas

解决方案


这可以通过在“B”上再次分组来完成。请注意,为此需要重置索引(drop = True以避免在数据框中重复“B”),否则该groupby函数将产生错误,指出“B”既是索引级别又是列标签。尝试替换group1.mean()为:

group1.reset_index(drop=True).groupby("B").mean()

推荐阅读