如何查找特定列的值为最大的行
df.max()
使用pandasidxmax功能。这很简单:
>&燃气轮机&燃气轮机;进口大熊猫
&燃气轮机&燃气轮机&燃气轮机;将numpy作为np导入
&燃气轮机&燃气轮机&燃气轮机;df=pandas.DataFrame(np.random.randn(5,3),列=['A','B','C'])
&燃气轮机&燃气轮机&燃气轮机;df
A、B、C
0 1.232853 -1.979459 -0.573626
1 0.140767 0.394940 1.068890
2 0.742023 1.343977 -0.579745
3 2.125299 -0.649328 -0.211692
4 -0.187253 1.908618 -1.862934
&燃气轮机&燃气轮机&燃气轮机;df['A'].argmax()
3.
&燃气轮机&燃气轮机&燃气轮机;df['B'].argmax()
4.
&燃气轮机&燃气轮机&燃气轮机;df['C'].argmax()
1.
-
或者,您也可以使用
numpy.argmax,例如numpy.argmax(df['A'])——它提供了相同的功能,并且在粗略观察中至少与idxmax一样快 -
idxmax()返回索引标签,而不是整数。- 示例”:如果索引标签为字符串值,如“a”到“e”行,则可能希望知道最大值出现在第4行(而不是“d”行)
- 如果您想在
索引中获取该标签的整数位置,则必须手动获取该位置(由于允许重复行标签,这可能会很棘手)
历史注释:
idxmax()在0.11之前曾被调用argmax()argmax在1.0.0之前被弃用,并在1.0.0中被完全删除- 从0.16开始,
argmax曾经存在并执行相同的功能(尽管运行速度似乎比idxmax慢)。argmax函数返回最大元素行位置索引内的整数位置- 熊猫移动到使用行标签而不是整数索引。位置整数索引过去非常常见,比标签更常见,尤其是在重复行标签常见的应用程序中
例如,考虑这个玩具数据框 >重复行标签:
[19]on
:dfrm
Output[19]:
A、B、C
a 0.143693 0.653810 0.586007
b 0.623582 0.312903 0.919076
c 0.165438 0.889809 0.000967
d 0.308245 0.787776 0.571195
e 0.870068 0.935626 0.606911
f 0.037602 0.855193 0.728495
g 0.605366 0.338105 0.696460
h 0.0000000.090814 0.963927
i 0.688343 0.188468 0.352213
i 0.879000 0.105039 0.900260
At[20]on:dfrm['A'].idxmax()
Output[20]:“我”
At[21]on:dfrm.iloc[dfrm['A'].idxmax()]#.ix,而不是旧版本的pandas中的.iloc
Output[21]:
A、B、C
i 0.688343 0.188468 0.352213
i 0.879000 0.105039 0.900260
因此,这里单纯地使用idxmax是不够的,而argmax的旧形式将正确地提供max行的位置(在本例中为位置9)
这正是动态类型语言中那些讨厌的、容易出现bug的行为之一,这使得这类事情非常不幸,值得一试。如果您正在编写系统代码,并且您的系统突然在某些数据集上被使用,而这些数据集在加入之前没有被正确清理,那么很容易产生重复的行标签,特别是字符串标签,如金融资产的CUSIP或SEDOL标识符。您无法轻松地使用类型系统来帮助您,并且您可能无法在索引上强制唯一性,而不会遇到意外丢失的数据
因此,你只能希望你的单元测试涵盖了所有内容(它们没有,或者更可能没有人编写任何测试)——否则(很可能)你只能等待看你是否在运行时碰巧遇到这个错误,在这种情况下,你可能不得不从你正在向其输出结果的数据库中放弃很多小时的工作,在IPython中,你的头撞在墙上试图手动重现问题,最终发现这是因为idxmax只能报告max行的标签,然后失望地发现没有标准函数自动为你获取max行的位置,自己编写错误的实现,编辑代码,祈祷不要再次遇到问题