python - 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
对象的函数
解决方案
这可以通过在“B”上再次分组来完成。请注意,为此需要重置索引(drop = True
以避免在数据框中重复“B”),否则该groupby
函数将产生错误,指出“B”既是索引级别又是列标签。尝试替换group1.mean()
为:
group1.reset_index(drop=True).groupby("B").mean()
推荐阅读
- discord - Java Discord Bot:当成员被机器人本身移动时,不要在 onGuildVoiceMoveEvent-Listener 中执行代码
- r - 在 R 的匹配函数中避免只有一个匹配标签
- php - 如何获取帐户激活电子邮件以在 PHP 中发送?
- google-sheets - 从arrayformula()返回值求和?
- c# - 如何应用工厂模式,接口没有方法(属于实现类)
- python - 如何从字典列表中创建 FusionCharts 热图?
- notepad++ - Notepad++ 条件替换
- javascript - Django chartjs多个图表堆叠
- javascript - axios拦截器重试发送FormData
- spring-boot - Spring Security OAuth2 Jwt 访问被拒绝