我有一个熊猫的数据框。
它看起来像这样:
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提问。
答案 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