我正在一个代码库中工作,我看到很多像这样的 groupby 用法,它们对
df
的列的子集进行操作
df[cols].groupby(some_column).nunique()[column2extract]
其中
cols
包括 some_column
和 column2extract
,并且在大多数情况下 cols = [some_column, column2extract]
从功能上来说,我认为这相当于
df.groupby(some_column).nunique()[column2extract]
前者有什么我应该注意的优点吗?我在这个代码库中经常看到这种情况,我觉得我可能遗漏了一些东西。
实际上,我认为 2 仅当
cols = [some_column, column2extract]
时等效,而当 cols
包含附加列时不一定等效
首先,
(...).groupby(some_column).nunique()[column2extract]
似乎浪费资源。您将计算所有列的 nunique
,然后对感兴趣的列建立索引。
这应该是:
(...).groupby(some_column)[column2extract].nunique()
所以,如果
df[cols].groupby(some_column).nunique()[column2extract]
是 cols
,column2extract+[some_column]
可能会更好。
df[cols].groupby(some_column).(...)
的唯一优点是如果some_column
是外部Series而不是属于df
一部分的列名称。
因此,在我看来,最好的是:
df.groupby(some_column)[column2extract].nunique()