Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么nunique会覆盖pandas中的分组列_Pandas - Fatal编程技术网

为什么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