Pandas数据帧获取列组合最大值

2024-04-26 17:18:42 发布

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

我有一个熊猫数据帧如下。在

df = pd.DataFrame({"A": [3,1,2,4,5,3,4,10], "B": [1,3,2,4,0,0,1,0]})

行值0到10是建议值(最好是10)。一个数据帧列是与0到10建议相关的类别(a、B等)。所有类别的权重都相同,但每行都与一个项目相关。在

我希望将数据帧中的最大值组合到两个类别(或更多)的项目进行排序。因此,如果与项目相关的行在类别a中的值为10,而在类别B中的值为0,则这将不是最高评级项目的预期解决方案。在上面给出的示例中,值为[4,4]的行是最佳选择。在

我的groupby解决方案没有给出预期的结果。在

grouped = df.groupby(['A', 'B'])
grouped[["A", "B"]].max().sort(ascending=False)

结果:

^{pr2}$

基于行的总和也不会产生预期的结果,因为它不区分类别。在


Tags: 数据项目示例dataframedf排序解决方案类别
2条回答

这个怎么样

df['pos'] = df.A/df.A.mean() + df.B/df.B.mean()
df.sort( columns='pos', ascending=False)

#    A  B       pos
#3   4  4  3.909091
#7  10  0  2.500000
#1   1  3  2.431818
#2   2  2  1.954545
#6   4  1  1.727273
#0   3  1  1.477273
#4   5  0  1.250000
#5   3  0  0.750000

如果您有更多列要排名['A','B','C', ...]

^{pr2}$

更新

因为0被认为是一个质量值(最低值),所以我会修改我的答案如下(不确定它会产生巨大的影响)

df['pos'] = (df.A+1)/(df.A.max()+1) + (df.B+1)/(df.B.max()+1)
df.sort( columns='pos', ascending=False)
#    A  B       pos
#3   4  4  1.454545
#7  10  0  1.200000
#1   1  3  0.981818
#2   2  2  0.872727
#6   4  1  0.854545
#0   3  1  0.763636
#4   5  0  0.745455
#5   3  0  0.563636
df = pd.DataFrame({"A": [3,1,2,4,5,3,4,10], "B": [1,3,2,4,0,0,1,0]})

然后计算数据帧中每列的秩

^{pr2}$

向数据框添加一个新列,该列是基于所有类别的总排名

df['total_rank'] = rank.sum(axis = 1)
df


Out[46]:
    A   B   total_rank
0   3   1   5
1   1   3   5
2   2   2   5
3   4   4   9
4   5   0   6
5   3   0   4
6   4   1   6
7   10  0   7

最后按总排名对数据帧进行排序

df.sort(columns='total_rank' , ascending = False)


Out[49]:
    A   B   total_rank
3   4   4   9
7   10  0   7
4   5   0   6
6   4   1   6
0   3   1   5
1   1   3   5
2   2   2   5
5   3   0   4

相关问题 更多 >