【发布时间】:2020-12-07 04:13:26
【问题描述】:
我有一个 pandas DataFrame,假设它的名称为“df”,其中所有列(浮点数)中都有数值。我想从数据框中检索前 5 个最高绝对值,以及它们的行和列标签。
我看到过类似的建议:
df.abs().stack().nlargest(5)
但是stack 方法不会保留所有元素的行和列标签,它会枚举一个轴,并且对于每个元素,然后枚举另一个轴,之前有一个空白元素。我需要列和行的值和名称。
我知道我可以通过迭代每一列,然后是其中的每一行,然后访问值并附加到 3 个列表,一个带有行名,另一个带有列名,第三个带有值,然后复制values 列表有一个带有绝对值的第四个列表,使用最后一个列表来获取 5 个最高值的位置,并使用这些位置来索引前 3 个列表,从而获得行名、列名和值。虽然肯定有更好、更紧凑和更 Python 的方式,但我真的无法在任何地方找到它,而且我通常擅长解决我的问题。
【问题讨论】:
-
您只需要行和列标签吗?不是具有前 5 个值的数据框?如果您可以粘贴您的数据框和预期输出,这将有所帮助。
-
stack方法确实保留了行和列标签,您可以尝试df.stack().nlargest(5).reset_index()并在level_0和level_1列中查看它们