如何在 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 中获取行业损失率的主要内容,如果未能解决你的问题,请参考以下文章
使用 pandas 在数据帧上执行 groupby,按计数排序并获取 python 中的前 2 个计数