【问题标题】:Python Pandas: MultiIndex groupby second level of columnsPython Pandas:MultiIndex groupby 二级列
【发布时间】:2018-07-29 03:57:33
【问题描述】:

我正在尝试按多列对行进行分组。 这个小例子可以说明我想要实现的目标:

import pandas as pd

col_index = pd.MultiIndex.from_arrays([['A','A','B','B'],['a','b','c','d']])

df = pd.DataFrame([ [1,2,3,3],
                    [4,2,2,2],
                    [6,4,2,2],
                    [1,2,4,4],
                    [3,8,4,4],
                    [1,2,3,3]], columns = col_index)

由此创建的DataFrame如下所示:

   A     B   
   a  b  c  d
0  1  2  3  3
1  4  2  2  2
2  6  4  2  2
3  1  2  4  4
4  3  8  4  4
5  1  2  3  3

我想按“c”和“d”分组,实际上是整个“B” 这给了我“KeyError:'c'”

#something like this
df.groupby(['c','d'], axis = 1, level = 1)
#or like this
df.groupby('B', axis = 1, level = 0)

我尝试寻找答案,但似乎找不到任何答案。

谁能告诉我我做错了什么?

【问题讨论】:

    标签: python pandas pandas-groupby multi-index


    【解决方案1】:

    您还可以显式指定 2 级多索引。

    df.groupby([("B","c"), ("B", "d")])
    

    【讨论】:

      【解决方案2】:

      这是一种首先重置列的方法:

      df.set_axis(df.columns.droplevel(0), axis=1,inplace=False).groupby(['c','d']).sum()
      Out[531]: 
            a   b
      c d        
      2 2  10   6
      3 3   2   4
      4 4   4  10
      

      【讨论】:

        猜你喜欢
        • 2021-08-26
        • 1970-01-01
        • 1970-01-01
        • 2021-02-08
        • 1970-01-01
        • 2015-07-16
        • 2015-12-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多