有没有一种简单的方法来手动迭代现有的 pandas groupby 对象?

Posted

技术标签:

【中文标题】有没有一种简单的方法来手动迭代现有的 pandas groupby 对象?【英文标题】:Is there a simple way to manually iterate through existing pandas groupby objects? 【发布时间】:2019-12-07 13:30:30 【问题描述】:

有没有一种简单的方法来手动迭代现有 pandas groupby 对象?

import pandas as pd

df = pd.DataFrame('x': [0, 1, 2, 3, 4], 'category': ['A', 'A', 'B', 'B', 'B'])
grouped = df.groupby('category')

在应用程序中,for name, group in grouped: 循环如下。对于手动测试,我想做类似group = grouped[0] 的事情并在for循环中运行代码。不幸的是,这不起作用。我能找到的最好的东西 (here) 是

group = df[grouped.ngroup()==0]

它依赖于原始 DataFrame 而不是单独的 groupby-Object,因此不是最佳 imo。

【问题讨论】:

get_group 和 answer 一样吗? @IanS 当我知道组的名称时它会有所帮助。但是我们只传递一个数字会更方便。 你能用一个因子创建一个组的字典,例如d=f"groupi":g for i,g in df.groupby(df.category.factorize()[0]),然后像d['group0']这样调用每个组 您可以尝试unique_cats = df["category"].unique() 然后df[df["category"] == unique_cats[0]] 并获得结果,因为在使用df.groupby("col").apply(myfunction) 时会反复执行相同的操作。所以不会有区别。 “手动迭代”是什么意思完全正确。你展示了一个 indexing 操作。只需从您的 groupby 对象创建一个列表。如果您想通过组标签访问它,请创建一个字典。 【参考方案1】:

任何可迭代对象(这里是 GroupBy 对象)都可以变成迭代器:

group_iter = iter(grouped)

下面的行相当于选择第一组(由0索引):

name, group = next(group_iter)

要获得下一组,只需重复:

name, group = next(group_iter)

等等……


来源:https://treyhunner.com/2018/02/python-range-is-not-an-iterator/

【讨论】:

以上是关于有没有一种简单的方法来手动迭代现有的 pandas groupby 对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Pandas 在现有的 excel 文件中保存新工作表?

pandas如何在现有的Excel表格上新建工作表并添加dataframe

使用 pandas 将不同位置的行附加到现有的 csv 文件

Pandas FutureWarning:字符的列迭代将在未来版本中被弃用

有没有一种有效的方法可以附加到现有的 csv 文件而不在 R 中重复?

有没有办法让派生实例使用现有的基础实例