如何找到特定列的值 最大 的行?
df.max()
会给我每列的最大值,我不知道如何得到相应的行。
原文由 Miki Tebeka 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何找到特定列的值 最大 的行?
df.max()
会给我每列的最大值,我不知道如何得到相应的行。
原文由 Miki Tebeka 发布,翻译遵循 CC BY-SA 4.0 许可协议
您也可以尝试 idxmax
:
In [5]: df = pandas.DataFrame(np.random.randn(10,3),columns=['A','B','C'])
In [6]: df
Out[6]:
A B C
0 2.001289 0.482561 1.579985
1 -0.991646 -0.387835 1.320236
2 0.143826 -1.096889 1.486508
3 -0.193056 -0.499020 1.536540
4 -2.083647 -3.074591 0.175772
5 -0.186138 -1.949731 0.287432
6 -0.480790 -1.771560 -0.930234
7 0.227383 -0.278253 2.102004
8 -0.002592 1.434192 -1.624915
9 0.404911 -2.167599 -0.452900
In [7]: df.idxmax()
Out[7]:
A 0
B 8
C 7
例如
In [8]: df.loc[df['A'].idxmax()]
Out[8]:
A 2.001289
B 0.482561
C 1.579985
原文由 Wes McKinney 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答972 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
使用熊猫
idxmax
功能。很简单:或者,您也可以使用
numpy.argmax
,例如numpy.argmax(df['A'])
它提供相同的东西,并且在粗略观察中至少与idxmax
一样快–idxmax()
返回索引标签,而不是整数。示例:如果您将字符串值作为索引标签,例如行“a”到“e”,您可能想知道最大值出现在第 4 行(而不是行“d”)。
如果您想要该标签在
Index
中的整数位置,您必须手动获取它(现在允许重复的行标签,这可能很棘手)。历史记录:
idxmax()
—在0.11之前被称为argmax()
argmax
在 1.0.0 之前被弃用并在 1.0.0 中完全删除argmax
曾经存在并执行相同的功能(尽管运行速度似乎比idxmax
慢)。argmax
函数返回最大元素行位置索引内的 _整数位置_。例如,考虑这个玩具
DataFrame
具有重复的行标签:因此,这里单纯使用
idxmax
是不够的,而旧形式的argmax
将正确提供最大行的 _位置_(在本例中为位置 9)。这正是动态类型语言中那些令人讨厌的容易出错的行为之一,这使得这种事情非常不幸,值得一试。如果您正在编写系统代码并且您的系统突然被用于一些在加入之前没有正确清理的数据集,那么很容易以重复的行标签结束,尤其是像金融资产的 CUSIP 或 SEDOL 标识符这样的字符串标签。您无法轻松地使用类型系统来帮助您解决问题,并且您可能无法在不遇到意外丢失数据的情况下强制索引的唯一性。
因此,您只能希望您的单元测试涵盖了所有内容(它们没有,或者更可能没有人编写任何测试)——否则(很可能)您只能等着看您是否碰巧碰到了这个运行时出错,在这种情况下,您可能不得不从输出结果的数据库中放弃许多小时的工作,在 IPython 中用头撞墙尝试手动重现问题,最终发现这是因为
idxmax
只能 报告最大行的 _标签_,然后很失望没有标准函数自动为你获取最大行的 _位置_,自己写一个错误的实现,编辑代码,祈祷你不要再次遇到问题。