我有一个 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/