三行代码  ›  专栏  ›  技术社区  ›  mrsnoopy

如何将数据从groupby拆分为列

  •  0
  • mrsnoopy  · 技术社区  · 1 月前

    我从GROUPBY函数创建新表,如下所示

    信用 身份证件
    (339.999, 566.0] 令人不快的 9829
    (339.999, 566.0] 好的 101495
    (566.0, 788.0] 336
    (566.0, 788.0] 2345
    令人不快的 1910
    好的 24616

    df[['BIRTH_RATE', 'Credit','ID']].groupby(by=['BIRTH_RATE','Credit']).count()
    

    我想把信用行分成几列

    (Credit Total = Good + Bad)
    (Bad rate = (Bad/Total)*100)
    
    出生率 好的 不良率
    111324 9829 8.8
    (566.0, 788.0] 336 2345 12.5
    (788.0, 1011.0] 1910 7.2

    df.groupby(["BIRTH_RATE"]).agg(Credit=('Credit', 'count'))
    
    2 回复  |  直到 1 月前
        1
  •  3
  •   Corralien    1 月前

    使用 pivot 重新格式化数据帧和 assign

    out = df.pivot_table(values='ID', index='BIRTH_RATE', columns='Credit', aggfunc='sum') \
            .assign(**{'Credit Total': lambda x: x['Bad']+x['Good'],
                       'Bad Rate': lambda x: round(x['Bad']/(x['Bad']+x['Good'])*100, 1)}) \
            .reset_index().rename_axis(columns=None)
    print(out)
    
    # Output:
             BIRTH_RATE   Bad    Good  Credit Total  Bad Rate
    0  (339.999, 566.0]  9829  101495        111324       8.8
    1    (566.0, 788.0]   336    2345          2681      12.5
    2   (788.0, 1011.0]  1910   24616         26526       7.2
    
        2
  •  1
  •   Chris    1 月前

    df = df.pivot(index='BIRTH_RATE',columns='Credit',values='ID').reset_index().rename_axis(None,axis=1)
    df['Credit Total'] = df['Bad']+df['Good']
    df['Bad Rate'] = (df['Bad']/df['Credit Total'])*100
    print(df)
    

    输出

             BIRTH_RATE   Bad    Good  Credit Total   Bad Rate
    0  (339.999, 566.0]  9829  101495        111324   8.829183
    1    (566.0, 788.0]   336    2345          2681  12.532637
    2   (788.0, 1011.0]  1910   24616         26526   7.200483