Python 访问DataFrameGroupBy对象以创建单个多索引数据帧
我一直在寻找,但我很难把这些东西放在一起 要求是获得包含所有给定数据的多索引数据帧。作为索引,我想要groupby键 我的数据框看起来像:Python 访问DataFrameGroupBy对象以创建单个多索引数据帧,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我一直在寻找,但我很难把这些东西放在一起 要求是获得包含所有给定数据的多索引数据帧。作为索引,我想要groupby键 我的数据框看起来像: A | B | C | D | 1 X 1 hi ab 2 X 1 hey ac 3 Z 3 ho ad ... 我使用dfGrouped=df.groupby(['A','B'])对列A、B进行聚类,并获取DataFrameGroupBy对象 为了获得这些组的概览,我使用了一个循环 for key,item in
A | B | C | D |
1 X 1 hi ab
2 X 1 hey ac
3 Z 3 ho ad
...
我使用dfGrouped=df.groupby(['A','B'])
对列A、B进行聚类,并获取DataFrameGroupBy对象
为了获得这些组的概览,我使用了一个循环
for key,item in dfGrouped:
print(key)
print(item)
输出为:
(X , 1)
DataFrame of Group
但就在这里,我的问题是通过循环创建一个包含所有组的数据帧。键是一个元组,项是一个数据帧。我试图通过字典、列表和pd.MultiIndex.from_tuples创建一个多索引数据框架,但它不起作用
最终的多索引数据帧应如下所示:
Group | Criteria | A | B | C | D
1 (X,1) X 1 hi ab
(X,1) X 1 hey ac
2 (Z,3) Z 3 ho ad
是否有其他方法获得所需的组
如果您需要更多信息,请告诉我 我不完全确定你想要什么,所以这里是我的解释。我认为您不需要执行
groupby
,只需将索引设置为列A
,B
(为了清晰起见,我将其重命名为id1
,id2
)
这将产生:
A B C D
id1 id2
1 X X 1 hi ab
X X 1 hey ac
3 Y Y 3 ho ad
您的索引现在是多索引(id1、id2)
如果要添加标准
,组
列,您也可以使用它们:
df3 = df2.copy()
df3['Criteria'] = df3.index
group_map = {b:n for n,b in enumerate(df3['B'].unique())}
df3['Group'] = df3['B'].map(group_map)
df3
产生
A B C D Criteria Group
id1 id2
1 X X 1 hi ab (1, X) 0
X X 1 hey ac (1, X) 0
3 Y Y 3 ho ad (3, Y) 1
(这里的
组
只是列B
中按顺序编号的值——我假设这就是您想要的)。如果您需要,您可以将_index
再次设置为['Group','A']
,如果这是您需要的非常感谢您的帮助。如果不符合我的要求,我会按照你的想法回来。不过,谢谢你的帮助。
A B C D Criteria Group
id1 id2
1 X X 1 hi ab (1, X) 0
X X 1 hey ac (1, X) 0
3 Y Y 3 ho ad (3, Y) 1