Pandas groupby 没有任何聚合操作

问题描述 投票:0回答:2

我有一个数据框,如下所示,我正在尝试按 Col1 进行“分组”(请参阅所需的输出)。这应该是显而易见的,但我一定不是在寻找正确的关键词。我尝试使用 groupby 进行的所有操作要么返回一个系列,要么似乎需要某种聚合。

df = pd.DataFrame({'Col1': ['A','B','A','B','B','B','A','A','B',],
                   'Col2': ['q','e','r','y','c','a','j','g','v',],
                   'Col3': [1,13,5,22,13,2,5,9,12],
                   })

  Col1 Col2  Col3
0    A    q     1
1    B    e    13
2    A    r     5
3    B    y    22
4    B    c    13
5    B    a     2
6    A    j     5
7    A    g     9
8    B    v    12

所需输出:

Col1    Col2    Col3
   A    q       1
        r       5
        j       5
        g       9
   B    e       13
        y       22
        c       13
        a       2
        v       12
python pandas-groupby
2个回答
1
投票

根据我的理解,这应该可以实现您的目标:多重索引

 df = pd.DataFrame({'Col1': ['A','B','A','B','B','B','A','A','B',],
                   'Col2': ['q','e','r','y','c','a','j','g','v',],
                   'Col3': [1,13,5,22,13,2,5,9,12],
                   })
print(df.set_index(["Col1", "Col2"]).sort_index())

这将是输出:我不确定,对你来说唯一的问题是索引列的高度与值列的高度。

            Col3
Col1 Col2      
A    g        9
     j        5
     q        1
     r        5
B    a        2
     c       13
     e       13
     v       12
     y       22

0
投票

我的临时解决方案只是聚合,然后删除该聚合列。

df.groupby(['Col1', 'Col2', 'Col3'], as_index=False).count().drop([<your_aggregated_column_name>])

但是在您的情况下,数据按所有列进行分组,因此聚合函数无需计算任何内容(即没有创建聚合列。这就是您想要的结果

df.groupby(['Col1', 'Col2', 'Col3'], as_index=False).count()
© www.soinside.com 2019 - 2024. All rights reserved.