有没有一种简单的方法来手动迭代现有的 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:字符的列迭代将在未来版本中被弃用