如何为 pandas GroupBy 对象实现方括号运算符?

How is the square bracket operator implemented for pandas GroupBy objects?

提问人:Evan Aad 提问时间:8/15/2023 更新时间:8/16/2023 访问量:70

问:

在 Python 3.11 中:要将方括号运算符应用于对象,应实现对象的 __getitem__ 方法

在 Python 的模块中,可以将方括号应用于通过该方法返回的对象,例如 .(示例摘自本教程pandasDataFramegroupby()tips.groupby("sex")["total_bill"].count()

但是,pandas 的 API 参考中没有列出 GroupBy 对象的方法。怎么会这样?方括号运算符是如何为对象实现的?__getitem__pandasGroupBy

python-3.x pandas indexing group-by 运算符重载

评论

0赞 Quang Hoang 8/15/2023
我认为在大多数图书馆的任何地方都没有列出。就像 or 一样,这些是相应操作的 Python 默认操作,通常不会在文档中列出。相反,它们是由操作人员记录的。__getitem____eq____le__
0赞 Evan Aad 8/15/2023
@QuangHoang 你说的“由运营人员记录”是什么意思?特别是,熊猫 GroupBy 方括号运算符记录在哪里?例如,它在哪里记录了这个运算符返回的对象类型?
0赞 Quang Hoang 8/15/2023
我并不是说 Pandas 文档列出了操作。我只是说你不应该期望 API 中列出。__getitem__
0赞 Evan Aad 8/15/2023
@QuangHoang API 参考记录了这些方法。pandasGroupBy__iter__

答:

1赞 Vitalizzare 8/16/2023 #1

有时我使用如下代码来查看源代码(如果可用):

import inspect
import pandas

groupby_obj = pandas.DataFrame().groupby(level=0)
print(f'{type(groupby_obj)=}\n{"-"*80}')

assert '__getitem__' in dir(groupby_obj)
code = inspect.getsource(groupby_obj.__getitem__)

print(code)

或者更确切地说,我只是在函数后面键入?以查看Jupyter Notebook中的代码。无论如何,您绝对可以在 GroupBy 对象中看到并读取其源代码__getitem__

正如在 pandas 的 GroupBy API 参考中提到的,我想关于 GroupBy 中的选择的这一部分旨在解释在这种情况下选择是如何工作的。__getitem__