【发布时间】: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"group{i}":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 对象创建一个列表。如果您想通过组标签访问它,请创建一个字典。
标签: python-3.x pandas pandas-groupby iterable manual-testing