如何在 pandas groupby 中获取行业损失率

Posted

技术标签:

【中文标题】如何在 pandas groupby 中获取行业损失率【英文标题】:How to get the industry lost rate in a 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 ?提前致谢!

【问题讨论】:

【参考方案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

【讨论】:

以上是关于如何在 pandas groupby 中获取行业损失率的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas GroupBy 获取组列表

使用 pandas 在数据帧上执行 groupby,按计数排序并获取 python 中的前 2 个计数

Groupby 和 Aggregate 以列表为元素的 pandas 列,并在列表中获取唯一值

如何在熊猫的 groupby 对象中获取组数?

pandas:获取数组中的所有groupby值[重复]

Pandas groupby agg - 如何获得计数?