如何组合两列以使第三列按方法从组中获取属性?
Posted
技术标签:
【中文标题】如何组合两列以使第三列按方法从组中获取属性?【英文标题】:How to combine two columns to make a third column taking property from group by method? 【发布时间】:2016-12-23 18:04:49 【问题描述】:不知道能不能把这个问题问清楚,不过这里我试试!
我有一个分类问题,我必须根据一个人的收入组来预测他的信用评分。我用过这段代码:
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(该收入范围内的信用评分)?例如,如果某人的收入等级为“高”,那么我可以预测他的 credit_score 将是 MAX(54,657) = 657 = 1.0
我想要的期望输出:newdata --> income_group = 'high' ---> credit_score = 1(因为我知道在高收入组中,MAX 值为 657,属于 1.0 的信用评分
请帮助我实现这一目标。
【问题讨论】:
【参考方案1】:您需要idxmax
来获取每个组的index
值,其中最大值在val
中,然后通过ix
选择这些行:
#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
【讨论】:
我简化了这个问题,实际问题有大约 20 个不同的收入等级,现在我得到了代码,但我无法到达最后一点,我确实找到了 val 如您所定义,但如何获取新数据点并与其收入组匹配并获得最终信用评分? 您能否将输入中的所需输出添加到问题中?我不确定我是否理解正确。 我也认为 val 的使用给我带来了一些问题,名称 val 不存在 groupby 函数它只是数字,使用时没有命名列groupby ,但我非常感谢你 :) 那么您是否需要包含值0,0,0,0,1,1,1,1
(加上.0)的广告新列?
yaa 完全正确,但不是 '0,0,0,0,1,1,1,1' 而是 '0,0,1,1' 你看到每个收入组有两个信用评分,但我只想要一个最高计数的信用评分。以上是关于如何组合两列以使第三列按方法从组中获取属性?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使表格的前两列与其内容一样宽,而第三列占据剩余空间?