代码之家  ›  专栏  ›  技术社区  ›  Malik Asad

我不能做精确的旋转台

  •  1
  • Malik Asad  · 技术社区  · 6 年前

    我有一个包含许多列的数据帧,我正试图创建数据透视表 这样地

    数据样本

    program | InWappTable | InLeadExportTrack
    
    VIC    |  True  | 1
    
    VIC    | True   |1
    
    VIC | True  |1
    
    VIC | True  | 1
    

    这是我的密码

    rec.groupby(['InWappTable', 'InLeadExportTrack','program']).size()
    

    预期产量为

    enter image description here

    2 回复  |  直到 6 年前
        1
  •  1
  •   anky    6 年前

    iiuc,你可以试试这个:

    df_new=df.groupby(['program'])['InWappTable','InLeadExporttrack'].count().reset_index()
    total = df_new.sum()
    total['program'] = 'Total'
    df_new=df_new.append(total, ignore_index=True)
    print(df_new)
    
        2
  •  1
  •   edesz    6 年前

    我不认为你需要 pivot_table 这里,虽然 数据透视表 接近 aggfunc 也可有效使用。

    我是这样接近这个的

    生成一些数据

    a = [['program','InWappTable','InLeadExportTrack'],
         ['VIC',True,1],
         ['Mall',False,15],
         ['VIC',True,101],
         ['VIC',True,1],
         ['Mall',True,74],
         ['Mall',True,11],
         ['VIC',False,44]]
    df = pd.DataFrame(a[1:], columns=a[0])
    print(df)
    
      program  InWappTable  InLeadExportTrack
    0     VIC         True                  1
    1    Mall        False                 15
    2     VIC         True                101
    3     VIC         True                  1
    4    Mall         True                 74
    5    Mall         True                 11
    6     VIC        False                 44
    

    首先做 GROUP BY 具有 count 聚集

    df_grouped = df.groupby(['program']).count()
    print(df_grouped)
    
             InWappTable  InLeadExportTrack
    program                                
    Mall               3                  3
    VIC                4                  4
    

    然后得到 sum of all columns

    num_cols = ['InWappTable','InLeadExportTrack']
    df_grouped[num_cols] = df_grouped[num_cols].astype(int)
    df_grouped.loc['Total']= df_grouped.sum(axis=0)
    df_grouped.reset_index(drop=False, inplace=True)
    print(df_grouped)
    
      program  InWappTable  InLeadExportTrack
    0    Mall            3                  3
    1     VIC            4                  4
    2   Total            7                  7
    

    编辑

    根据操作中的注释, df_grouped = df.groupby(['program']).count() 可以替换为 df_grouped = df.groupby(['program']).sum() . 在这种情况下,输出如下所示

      program  InWappTable  InLeadExportTrack
    0    Mall            2                100
    1     VIC            3                147
    2   Total            5                247