0

我正在寻找,但我无法将这些东西放在一起。

要求是获得具有所有给定数据的 MultiIndex 数据帧。作为索引,我想拥有 groupby 键。

我的数据框看起来像:

   A | B | C | D |
1  X   1  hi   ab
2  X   1  hey  ac
3  Z   3  ho   ad
...

我按列 A、B 进行聚类dfGrouped = df.groupby(['A','B'])并获取 DataFrameGroupBy 对象。

为了获得组的概述,我使用了一个循环。

 for key,item in dfGrouped: 
       print(key)
       print(item)

输出是:

(X , 1)
DataFrame of Group

但正是在这里,我遇到了通过循环创建包含所有组的 DataFrame 的问题。键是元组,项目是数据框。我尝试通过字典、列表和 pd.MultiIndex.from_tuples 创建一个 MultiIndex DataFrame,但它不起作用。

最终的 MultiIndex DataFrame 应如下所示:

  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

是否有其他方法可以获得所需的组?

如果您需要更多信息,请告诉我!

4

1 回答 1

0

我不完全确定你在追求什么,所以这是我的解释。我认为您不需要这样做groupby,您只需将索引设置为您的列AB(为了清楚起见,我将其重命名为id1id2

df2 = df.set_index(['B','A'],drop=False ).rename_axis(['id1','id2'])
df2

这会产生:


        A   B   C   D
id1 id2             
1   X   X   1   hi  ab
    X   X   1   hey ac
3   Y   Y   3   ho  ad

你的索引现在是 MultiIndex (id1,id2)

如果你想添加你的Criteria,Group列,你也可以拥有它们:

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

(这里Group只是列中按顺序编号的值B——我认为这就是你想要的)。如果你愿意,你可以set_index再次这样做,['Group','A']如果那是你所需要的

于 2020-11-17T23:01:04.397 回答