首页 > 解决方案 > 为什么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 |
+---+---------+-----------+

为什么将我的聚合函数更改sumnunique覆盖我的 groupby 列 user_id?

标签: pandas

解决方案


这只是一种方式nunqiue,因为您没有提到要应用函数的列,所以它将应用于 dfs 中的每一列,这将返回 1 作为groupbyid

df.groupby('user_id')['module_id'].nunique().reset_index()
Out[521]: 
   user_id  module_id
0        1          3
1        2          2

推荐阅读