如何使用分组方法将两列合并为第三列提取属性?

2024-04-16 10:40:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道我是否能问清楚这个问题,但我在这里尝试!你知道吗

我有一个分类问题,我必须根据一个人的收入群体来预测他的信用评分。我使用了以下代码:

dta.groupby(['income_bracket'])['credit_score'].get_values()

现在我像往常一样有一个数据表,如下所示:

income_bracket  credit_scores    
    'very low'            0.0             2340
                          1.0              456
    'moderate'            0.0             1234 
                          1.0              657
        'high'            0.0               54
                          1.0              657
   'very high'            0.0                9
                          1.0             1234

说明:上述数据表明,例如,信用评分为0.0的“极低”收入阶层的人是2340,信用评分为1.0的人是456。你知道吗

现在,有没有什么方法可以让我做一些类似的事情:如果一个人在收入等级中,那么预测他的信用等级将是最高的(在收入等级中的信用等级)?例如,如果某人的收入等级为“高”,那么我可以预测他的信用评分将为MAX(54657)=657=1.0

我想要的输出是:newdata-->;income\u group='high'-->;credit\u score=1(因为我知道在高收入组中,最大值是657,属于credit score 1.0)

请帮我实现这个目标。你知道吗


Tags: 代码gt分类评分群体veryscorecredit
1条回答
网友
1楼 · 发布于 2024-04-16 10:40:44

您需要^{}来获取每个组的index值,该值在val中最大,然后按^{}选择这些行:

#dta.reset_index(inplace=True)
#dta = dta.reset_index().rename(columns={0: 'val'}) 
print (dta)
  income_bracket  credit_score   val
0       very low           0.0  2340
1       very low           1.0   456
2       moderate           0.0  1234
3       moderate           1.0   657
4           high           0.0    54
5           high           1.0   657
6      very high           0.0     9
7      very high           1.0  1234
print (dta.groupby(['income_bracket'], sort=False)['val'].idxmax())
income_bracket
very low     0
moderate     2
high         5
very high    7
Name: val, dtype: int64

#select all columns
print (dta.ix[dta.groupby(['income_bracket'], sort=False)['val'].idxmax()])
  income_bracket  credit_score   val
0       very low           0.0  2340
2       moderate           0.0  1234
5           high           1.0   657
7      very high           1.0  1234

#select columns income_bracket and credit_score
print (dta.ix[dta.groupby(['income_bracket'], sort=False)['val'].idxmax(), 
             ['income_bracket','credit_score']])
  income_bracket  credit_score
0       very low           0.0
2       moderate           0.0
5           high           1.0
7      very high           1.0

#select column credit_score    
print (dta.ix[dta.groupby(['income_bracket'], sort=False)['val'].idxmax(), 'credit_score'])
0    0.0
2    0.0
5    1.0
7    1.0
Name: credit_score, dtype: float64

相关问题 更多 >