代码之家  ›  专栏  ›  技术社区  ›  Denis Padua

Pandas-按相同维度分组

  •  1
  • Denis Padua  · 技术社区  · 2 年前

    我有一个数据帧,它有五列:G1、G2、G3、G4和Tax。我对每个G列按G和Tax进行分组,以计算有多少行的值为1。但每个G的结果维度是不同的,因为有些G只有0个值。

    这是我的代码:

    self.instance.df.groupby(["G1", "Tax"]).size().drop(0)
    self.instance.df.groupby(["G2", "Tax"]).size().drop(0)
    

    我将删除索引0,因为我只需要1个值。

    初始数据帧:

           G1  G2  G3  G4  Tax
       0   0   1   0   0   1.1
       1   1   1   0   1   1.1
       2   1   1   0   0   1.2
       3   0   1   0   1   1.3
    

    我期待的结果是:

    G1  Tax
    1   1.1   5
        1.2   7
        1.5   3
        1.7   0
    

    我得到的结果是:

     G1 Tax
     1  1.1   5
        1.2   7
        1.5   3
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   mozway    2 年前

    IIUC,您可以通过执行单个 groupby :

    out = (df.set_index('Tax').filter(like='G').eq(1)
             .groupby(level='Tax').sum()
           )
    

    cols = ['G1', 'G2', 'G3', 'G4']
    
    out = df.groupby('Tax')[cols].agg(lambda x: x.eq(1).sum())
    

    如果您的值仅为0/1:

    cols = ['G1', 'G2', 'G3', 'G4']
    
    out = df.groupby('Tax')[cols].sum()
    

    实例

    # input
       G1  G2  G3  G4 Tax
    0   0   1   0   0   A
    1   1   1   0   1   A
    2   1   1   0   0   A
    3   0   1   0   1   B
    
    # output
         G1  G2  G3  G4
    Tax                
    A     2   3   0   1
    B     0   1   0   1