为什么nunique会覆盖pandas中的分组列
这是我的数据的一个大大简化的版本为什么nunique会覆盖pandas中的分组列,pandas,Pandas,这是我的数据的一个大大简化的版本 +---+---------+-----------+ ||用户|模块| id| +---+---------+-----------+ | 0 | 1 | 1 | | 1 | 1 | 2 | | 2 | 1 | 3 | | 3 | 2 | 1 | | 4 | 2 | 1 | | 5 | 2 |
+---+---------+-----------+
||用户|模块| 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],'module_id':[1,2,3,1,1,2]})
如果我在用户id上对此进行分组,然后使用总和进行聚合,我将得到预期结果:
df.groupby('user\u id',as\u index=False).sum()
+---+---------+-----------+
||用户|模块| id|
+---+---------+-----------+
| 0 | 1 | 6 |
| 1 | 2 | 4 |
+---+---------+-----------+
但是,如果我改为使用nunique聚合,则分组列也会聚合:
df.groupby('user\u id',as\u index=False).nunique()
+---+---------+-----------+
||用户|模块| id|
+---+---------+-----------+
| 0 | 1 | 3 |
| 1 | 1 | 2 |
+---+---------+-----------+
为什么要将我的聚合函数从
sum
更改为nunique
覆盖我的groupby列用户id?这只是nunqiue
的方式,因为您没有提到要应用该函数的列,所以它将应用于dfs中的每一列,这将返回groupby
id的1
df.groupby('user_id')['module_id'].nunique().reset_index()
Out[521]:
user_id module_id
0 1 3
1 2 2
您需要提供列名
df.groupby('user_id')[['module_id']].nunique().reset_index()
这说明了nunique()的确切用法,对于您的情况,它将返回组中每个列的唯一元素数。在我的真实数据中,有很多列我想应用nunique,但有一些我不想,有没有一种简单的方法告诉努尼克跳过哪一列?@dumbledad你可能需要知道你想应用哪一列函数,然后把它切掉
user_id module_id
0 1 3
1 2 2