Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 访问DataFrameGroupBy对象以创建单个多索引数据帧_Python_Pandas_Pandas Groupby - Fatal编程技术网

Python 访问DataFrameGroupBy对象以创建单个多索引数据帧

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

我一直在寻找,但我很难把这些东西放在一起

要求是获得包含所有给定数据的多索引数据帧。作为索引,我想要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 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