查看Pandas groupby对象的摘要

1u4esq0p  于 2023-06-28  发布在  其他
关注(0)|答案(2)|浏览(105)

我现在正在处理一个相对奇怪的架构,我可能会收到一个按对象分组的数据(在应用聚合函数之前),但实际上无法看到产生它的操作或 Dataframe 。我需要以某种方式从groupby对象本身恢复该信息。直觉上,这些信息必须保存在groupby对象中的某个地方,但我在文档中看不到如何访问它。有没有人有任何信息可以帮助我?
我尝试过查阅group by对象的文档,也尝试过使用.head()函数来实现group by对象。我想恢复底层dataframe的列和哪些列被分组。

tcomlyy6

tcomlyy61#

假设df_gby是你的输入,从我在源代码中读到的内容来看,GroupBy类继承自BaseGroupBy,后者可以通过grouper属性访问,该属性提供对分组信息的访问(including groupnames):

df_gby = pd._testing.makeMixedDataFrame().groupby(["A", "B"])

>>> type(df_gby)
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000017665493250>

>>> type(df_gby.grouper)
pandas.core.groupby.ops.BaseGrouper

>>> df_gby.grouper.names
['A', 'B']

要获取所有列名,可以用途:

>>> df_gby.obj.columns
Index(['A', 'B', 'C', 'D'], dtype='object')
  • 使用的DataFrame:*
A    B     C          D
0  0.0  0.0  foo1 2009-01-01
1  1.0  1.0  foo2 2009-01-02
2  2.0  0.0  foo3 2009-01-05
3  3.0  1.0  foo4 2009-01-06
4  4.0  0.0  foo5 2009-01-07
v8wbuo2f

v8wbuo2f2#

你可以使用pd.concat来返回所有组的一个 Dataframe ,循环遍历每个组和.indices

data = pd.concat(
    [v.reset_index(drop=False).set_index(idx_array)
     for (k, v), (g, idx_array) in zip(grouped, grouped.indices.items())]
    ).sort_index()

这组合了组和原始索引,因此未分组的 Dataframe 的初始顺序不会丢失。
事实上,一个更简单的答案可以通过@Andy L.找到here

grouped.head(grouped.ngroup().size)

相关问题