pandas - 为什么nunique会覆盖pandas中的分组列
问题描述
这是我的数据的一个大大简化的版本
+---+---------+-----------+
| | user_id | module_id |
+---+---------+-----------+
| 0 | 1 | 1 |
| 1 | 1 | 2 |
| 2 | 1 | 3 |
| 3 | 2 | 1 |
| 4 | 2 | 1 |
| 5 | 2 | 2 |
+---+---------+-----------+
df = pd.DataFrame({'user_id':[1,1,1,2,2,2],'module_id':[1,2,3,1,1,2]})
如果我在 user_id 上分组,然后使用 sum 聚合,我会得到预期的结果:
df.groupby('user_id', as_index=False).sum()
+---+---------+-----------+
| | user_id | module_id |
+---+---------+-----------+
| 0 | 1 | 6 |
| 1 | 2 | 4 |
+---+---------+-----------+
但是,如果我改为使用 nunique 聚合,则分组列也会被聚合:
df.groupby('user_id', as_index=False).nunique()
+---+---------+-----------+
| | user_id | module_id |
+---+---------+-----------+
| 0 | 1 | 3 |
| 1 | 1 | 2 |
+---+---------+-----------+
为什么将我的聚合函数更改sum
为nunique
覆盖我的 groupby 列 user_id?
解决方案
这只是一种方式nunqiue
,因为您没有提到要应用函数的列,所以它将应用于 dfs 中的每一列,这将返回 1 作为groupby
id
df.groupby('user_id')['module_id'].nunique().reset_index()
Out[521]:
user_id module_id
0 1 3
1 2 2
推荐阅读
- selenium-webdriver - 在范围报告中截取失败的测试用例后,出现图像缩略图但没有图像显示
- spring - 注入地图
> 使用 Spring 的 @Value - php - 如何在命令行中使用不同版本的 PHP
- python - 通过搜索另一个值来更改 csv 文件中的值(Python)
- javascript - 发布到外部 API 会引发 CORS,但它适用于 Postman
- node.js - 将箭头函数移动到另一个导出的函数
- javascript - 在 JS 库中调用的 AppComponent 中声明的函数中未定义 Http
- javascript - Javascript解构console.log导致错误
- yaml - pyyaml 使用标签解析数据
- javascript - Intersection Observer:每个元素只调用一次函数