【问题标题】:Access DataFrameGroupBy object to create single MultiIndex DataFrame访问 DataFrameGroupBy 对象以创建单个 MultiIndex DataFrame
【发布时间】:2021-03-01 04:13:42
【问题描述】:

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

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

但正是在这里,我遇到了通过循环创建包含所有组的 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

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

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

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    我不完全确定你在追求什么,所以这是我的解释。我认为您不需要做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)

    如果您想添加 CriteriaGroup 列,您也可以拥有它们:

    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'] 如果这是你需要的话

    【讨论】:

    • 非常感谢您的帮助。如果它不符合我的要求,我会按照你的想法回来。不过还是感谢您的帮助。
    猜你喜欢
    • 2018-01-02
    • 2012-11-14
    • 1970-01-01
    • 2016-12-18
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    相关资源
    最近更新 更多