为什么行为对于count而言是不同的,而对于GroupBy对象而言是唯一的?

时间:2018-09-05 02:53:04

标签: pandas

我有以下csv文件:

col_1,col_2
foo,1
foo,1
bar,1
bar,2
baz,1
baz,1
baz,2
baz,2
qux,1
qux,2
qux,3

以及以下代码(以及输出)

print(df.groupby('col_1').count())
#        col_2
# col_1
# bar        2
# baz        4
# foo        2
# qux        3

print(df.groupby('col_1').nunique())
#        col_1  col_2
# col_1
# bar        1      2
# baz        1      2
# foo        1      1
# qux        1      3

对于nunique,将返回2列:col_1col_2。为什么在我致电count时col_1丢失?

1 个答案:

答案 0 :(得分:1)

countnunique是不同的功能,并且执行不同的操作。

文档链接以供进一步阅读:

count返回每个组中每个系列的非NA值的数量。

nunique返回每个组中每个序列的唯一非NA值的数量


关于为什么要实现nunique以便也包括分组列的原因,我不确定,因为在df.groupby(...).nunique()用例中,该系列通常是一系列的。

在通常情况下,分组列设置为索引(除非使用as_index=False),并且不重复作为框架中的列。

count的行为符合预期 groupby apply/agg的语义,而并非相反。

但是,有人确实为nunique编写了测试,其中预期的输出还包括分组列,作为您观察到的as_index=Trueas_index=False的列。