我在一个代码库中工作,我看到很多像这样的groupby使用,它们对df列的子集进行操作

df[cols].groupby(some_column).nunique()[column2extract]

其中cols包括some_columncolumn2extract,在大多数情况下是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()

因此,如果cols[column2extract, some_column]df[cols].groupby(some_column).nunique()[column2extract]可能更好,但仍然是一个不必要的复杂语法.

df[cols].groupby(some_column).(...)的唯一优点是some_column是外部Series,而不是df一部分的列名.

因此,在我看来,最好的是:

df.groupby(some_column)[column2extract].nunique()

如果您想要系列作为输出,这也是一个选项:

df[column2extract].groupby(df[some_column]).nunique()

Python相关问答推荐

try 与gemini-pro进行多轮聊天时出错

将整组数组拆分为最小值与最大值之和的子数组

如何让剧作家等待Python中出现特定cookie(然后返回它)?

如何列举Pandigital Prime Set

我如何使法国在 map 中完全透明的代码?

梯度下降:简化要素集的运行时间比原始要素集长

NumPy中条件嵌套for循环的向量化

如何在Polars中从列表中的所有 struct 中 Select 字段?

如何强制向量中的特定元素在Gekko中处于优化解决方案中

如何在Python中将超链接添加到PDF中每个页面的顶部?

Python协议不兼容警告

极点替换值大于组内另一个极点数据帧的最大值

如何在Python中自动创建数字文件夹和正在进行的文件夹?

如何根据一定条件生成段id

仅取消堆叠最后三列

我如何处理超类和子类的情况

如何在表单中添加管理员风格的输入(PDF)

两个名称相同但值不同的 Select 都会产生相同的值(discord.py)

时间戳上的SOAP头签名无效

使用美汤对维基百科表格进行网络刮擦未返回任何内容