查看 Pandas groupby 对象的摘要

问题描述 投票:0回答:2

我现在正在处理一个相对奇怪的架构,我可能会收到一个按对象分组(在应用聚合函数之前),但无法实际看到生成它的操作或数据帧。我需要以某种方式从 groupby 对象本身恢复该信息。对我来说,直觉上该信息必须保存在 groupby 对象中的某个位置,但我在文档中看不到如何访问它。有谁有任何信息可以帮助我吗?

我尝试查看按对象分组的文档,以及使用

.head()
函数按对象分组。我想恢复底层数据帧的列以及分组的列。

python pandas dataframe group-by
2个回答
4
投票

假设

df_gby
是您的输入,并且从我在源代码中可以读到的内容来看,
GroupBy
类继承自
BaseGroupBy
,后者可以使用
grouper
属性进行访问,该属性提供对分组信息(包括组
names
):

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')

使用的数据框:

     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

2
投票

您可以使用

pd.concat
返回所有组的单个数据帧,循环遍历每个组以及
.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()

这结合了组和原始索引,因此未分组数据帧的初始顺序不会丢失。

事实上,可以在here找到一个更简单的答案,作者:@Andy L.:

grouped.head(grouped.ngroup().size)
© www.soinside.com 2019 - 2024. All rights reserved.