我现在正在处理一个相对奇怪的架构,我可能会收到一个按对象分组的数据(在应用聚合函数之前),但实际上无法看到产生它的操作或 Dataframe 。我需要以某种方式从groupby对象本身恢复该信息。直觉上,这些信息必须保存在groupby对象中的某个地方,但我在文档中看不到如何访问它。有没有人有任何信息可以帮助我?我尝试过查阅group by对象的文档,也尝试过使用.head()函数来实现group by对象。我想恢复底层dataframe的列和哪些列被分组。
tcomlyy61#
假设df_gby是你的输入,从我在源代码中读到的内容来看,GroupBy类继承自BaseGroupBy,后者可以通过grouper属性访问,该属性提供对分组信息的访问(including groupnames):
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
v8wbuo2f2#
你可以使用pd.concat来返回所有组的一个 Dataframe ,循环遍历每个组和.indices:
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()
这组合了组和原始索引,因此未分组的 Dataframe 的初始顺序不会丢失。事实上,一个更简单的答案可以通过@Andy L.找到here:
grouped.head(grouped.ngroup().size)
2条答案
按热度按时间tcomlyy61#
假设
df_gby
是你的输入,从我在源代码中读到的内容来看,GroupBy
类继承自BaseGroupBy
,后者可以通过grouper
属性访问,该属性提供对分组信息的访问(including groupnames
):要获取所有列名,可以用途:
v8wbuo2f2#
你可以使用
pd.concat
来返回所有组的一个 Dataframe ,循环遍历每个组和.indices
:这组合了组和原始索引,因此未分组的 Dataframe 的初始顺序不会丢失。
事实上,一个更简单的答案可以通过@Andy L.找到here: