编辑:
经过OP的进一步解释,我认为将values数组与values.max()进行比较更灵活,如下所示:
test[test.values == test.values.max()]
它返回数据帧的max_value行。如果 att1_max 与 att2_max 相同但在不同的行上,则返回两行。在这种情况下,如果单行更可取,请将head(1) 添加到其中。
att1_max 和 att2_max 在同一行:
Out[660]:
att1 att2
0 0.1000 0.01000
1 0.0010 0.00010
2 0.0001 0.00001
3 1.0000 1.10000
4 2.0000 2.20000
5 2.3000 2.37000
6 0.0000 0.00000
7 -1.0000 -1.50000
8 -2.0000 -2.50000
In [661]: test[test.values == test.values.max()]
Out[661]:
att1 att2
5 2.3 2.37
att1_max 和 att2_max 在不同的行上:
Out[664]:
att1 att2
0 0.1000 0.01000
1 0.0010 0.00010
2 0.0001 0.00001
3 1.0000 1.10000
4 2.0000 2.20000
5 2.3000 1.37000
6 0.0000 0.00000
7 -1.0000 -1.50000
8 -2.0000 -2.50000
In [665]: test[test.values == test.values.max()]
Out[665]:
att1 att2
5 2.3 1.37
att1_max 与 att2_max 相同,但在不同的行上(这种情况 stack 只返回 1 行,而这会返回两行)
Out[668]:
att1 att2
0 0.1000 0.01000
1 25.0500 0.00010
2 0.0001 0.00001
3 1.0000 1.10000
4 2.0000 2.20000
5 2.3000 1.37000
6 0.0000 0.00000
7 -1.0000 25.05000
8 -2.0000 -2.50000
In [669]: test[test.values == test.values.max()]
Out[669]:
att1 att2
1 25.05 0.0001
7 -1.00 25.0500
注意:在最后一种情况下,如果需要返回单,只需添加head(1)
In [670]: test[test.values == test.values.max()].head(1)
Out[670]:
att1 att2
1 25.05 0.0001
注意 2:如果 att1_max 和 att2_max 相同且在同一行,则该行将显示两次。在那种情况下使用drop_duplicates() 来处理它。
原文:
@Wen-Ben 的回答很好,但我认为在这里使用stack 是不必要的。我更喜欢idxmax和drop_duplicates:
test.iloc[test.idxmax()].drop_duplicates()
或
test.loc[test.idxmax().drop_duplicates()]
att1_max 和 att2_max 在同一行:
In [510]: test.iloc[test.idxmax()].drop_duplicates()
Out[510]:
att1 att2
5 2.3 2.37
att1_max 和 att2_max 在不同的行上:
In [513]: test.iloc[test.idxmax()].drop_duplicates()
Out[513]:
att1 att2
5 2.3 1.37
4 2.0 2.20
所以,att1_max 和 att2_max 在同一行,返回精确的 1 行。 att1_max 和 att2_max 在不同的行,返回 att1_max 和 att2_max 存在的 2 行。