检索具有最大值的列的值

时间:2019-06-12 13:35:06

标签: python pandas dataframe

我有一个熊猫的数据框。

它看起来像这样:

   level_0  level_1      from        to
0        0        0  0.927273  0.300000
1        1        1  0.946667  0.727273
2        1        2  0.565657  0.200000
3        1        3  0.946667  0.083333
4        2        4  0.831818  1.000000
5        3        5  0.831818  0.818182
6        4        6  0.872727  0.666667
7        5        7  1.000000  0.700000
8        6        8  1.000000  1.000000
9        7        9  1.000000  0.666667

我想输出从+到得分最高的(level_0,level_1)对。这些对于大多数人来说都是显而易见的,但是在level_0 = 1的情况下,我有三种可能性。我希望算法输出(1,1),因为它们具有从+到分数的最高组合。

我该如何实现?

在此先感谢您和我的鲁ck提问。

3 个答案:

答案 0 :(得分:0)

您要吗

    # this runs on the original double-indexed dataframe
    df[['from','to']].sum(1).groupby(level=0).idxmax()

输出:

level_0
0    (0, 0)
1    (1, 1)
2    (2, 4)
3    (3, 5)
4    (4, 6)
5    (5, 7)
6    (6, 8)
7    (7, 9)
dtype: object

答案 1 :(得分:0)

您可以使用此:

df.set_index(['level_0','level_1'])\
  .assign(total_score = (df['from']+df['to']).to_numpy())['total_score']\
  .groupby(level=0).idxmax()

输出:

level_0
0    (0, 0)
1    (1, 1)
2    (2, 4)
3    (3, 5)
4    (4, 6)
5    (5, 7)
6    (6, 8)
7    (7, 9)
Name: total_score, dtype: object

答案 2 :(得分:0)

pandas方法是计算列的总和,并在该总和等于其最大值的位置进行搜索。

我会使用:

score = df['to'] + df['from']
print(df[score == score.max()])

在当前示例中,它给出了:

   level_0  level_1      from        to
8        6        8  1.000000  1.000000

如果数据框像dfi = df.set_index(['level_0', 'level_1'])一样具有多重索引,则完全相同:

scorei = dfi['from'] + dfi['to']
print(dfi[scorei == scorei.max()])

给出:

                 from   to
level_0 level_1           
6       8         1.0  1.0