python - Pandas :按有/过滤问题进行分组

标签 python pandas

我有一个 pandas 数据框 df ,如下所示:

| Index   | Item       | Value       |
+---------+------------+-------------+
|  0      | 1024       | 20          |
|  1      | 1024       | 27          |
|  2      | 1024       | 19          |
|  3      | 4096       | 44          |
| ...     | ...        | ...         |

现在我可以按 Item 列对此数据框进行分组并对值执行一些聚合:

grouped = df.groupby(df['Item']).agg({'Value':['median', 'mean', 'std', 'count']})

如果我现在查看该分组对象,它看起来像一个堆叠的数据框:

grouped.head()

|        | Value                       |
+--------+-----------------------------+
|        | median | mean | std | count |
+--------+--------+------+-----+-------+
| Item   |        |      |     |       |
+--------+--------+------+-----+-------+
| 1024   |  20    | 22.0 | 4.3 | 3     |
| 4096   |  44    | 44.0 | NaN | 1     |
+--------+--------+------+-----+-------+

我现在只想过滤分组的项目,例如计数> 1,所以我尝试了以下操作:

filtered = grouped.filter(lambda x: x['count'] > 1)

但是我得到一个:TypeError: 'function' object is not iterable

我也尝试过

filtered = grouped.filter(lambda x: x.Value.count > 1)

filtered = grouped[grouped.Age.count > 1]

但最后一个只抛出 KeyError: True

在这种情况下如何实现这种过滤,在 SQL 中,当我想过滤聚合分组表时,就像编写 GROUP BY/HAVING 子句一样在 Pandas 中?

例如,我如何编写一个仅返回中位数 == 平均值的行的查询?

谢谢。

最佳答案

我找到了解决方案:

grouped[grouped.Value['count'] > 1]

会做的。显然,名称 count 在该对象上有两种含义,因此最好使用上面的语法来引用它。

关于python - Pandas :按有/过滤问题进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37275017/

相关文章:

python - 获取线性回归模型的值误差

Python Windows 服务 - 日志记录不起作用

python - 无法使用 Python 2.7 从 django 网站连接到 MySQL,但使用 Python 2.5 可以

python - 在Python中生成一个名为当前时间的文本文件

python - 使用 pandas 中的查询函数返回位于两个列表交集的行

python - 如果自上次输入以来值没有更改,如何避免向 SQLAlchemy 添加行?

python - 使用 pandas 为每个组创建一个组合 DataFrame

python - 如何将相同类别的列置于 Pandas 数据框中的单个标题下?

python - 如果 csv 为空,如何不读取 csv

python - Pandas 根据索引将系列分配给列