【问题标题】:How to get the industry lost rate in a pandas groupby如何在 pandas groupby 中获取行业损失率
【发布时间】:2021-07-22 10:14:21
【问题描述】:

我想用 pandas groupby() 总结一个行业级别丢失率的数据框

我的数据表如下所示: type 包含不同的行业,good_bad=0 表示不良贷款,good_bad=1 表示良好贷款

type    | good_bad
food    |    0
food    |    0
food    |    1
Retail  |    1
Retail  |    1
Retail  |    1
Retail  |    0

我想创建一个新列lost_rate,它根据每个行业的不良贷款发生率计算损失率,然后除以行业总数:

type    | good_bad  | lost_rate   | (calculation on how it works)
food    |    0      |     0.667   | (2/3)
food    |    0      |     0.667   | (2/3)
food    |    1      |     0.667   | (2/3)
Retail  |    1      |     0.25    | (1/4)
Retail  |    1      |     0.25    | (1/4)
Retail  |    1      |     0.25    | (1/4)
Retail  |    0      |     0.25    | (1/4)

我可以分别得到分子和分母,但我不知道如何将它们放在一起:

分子:df.loc[df['good_bad']==0, 'type'].value_counts().reset_index(name='counts')

分母: df['type'].value_counts().reset_index()

我也尝试创建一个函数并应用于数据框但无法开始工作:

    def industry_lost_rate(df):
        count = df.loc[loan_data['good_bad']==0, 'type'].value_counts()
        industry_sum = df['type'].value_counts()
        rate = count / industry_sum
        return pd.DataFrame({"count":count, "rate": rate})

df2 = df.groupby('type')['good_bad'].apply(industry_lost_rate(df)).reset_index()

谁能告诉我如何获得 lost_rate ?提前致谢!

【问题讨论】:

    标签: python pandas dataframe group-by count


    【解决方案1】:

    您可以尝试 groupby type 列并使用transform 计算每个组中good_bad 列的平均值。

    df['lost_rate'] = 1 - df.groupby('type')['good_bad'].transform('mean').round(3)
    
    print(df)
    
         type  good_bad  lost_rate
    0    food         0      0.667
    1    food         0      0.667
    2    food         1      0.667
    3  Retail         1      0.250
    4  Retail         1      0.250
    5  Retail         1      0.250
    6  Retail         0      0.250
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      • 2012-10-11
      • 2020-11-17
      • 2023-01-03
      • 1970-01-01
      • 2021-08-07
      • 2019-05-24
      相关资源
      最近更新 更多