【问题标题】:Pandas Dataframes - Get the dataframe's overall top 5 values and their row and column labels, not by column or by rowPandas Dataframes - 获取数据框的整体前 5 个值及其行和列标签,而不是按列或按行
【发布时间】: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_0level_1 列中查看它们

标签: python pandas dataframe


【解决方案1】:

建议的解决方案包含索引中的行和列标签,并且不会丢失。

重新附加适当名称的简单示例:

df = pd.DataFrame({'a': np.random.random(100), 'b': np.random.random(100)})

df.abs().stack().nlargest(5).rename('value').rename_axis(['row', 'column']).reset_index()

结果:

  row  column     value
0  87       a  0.958382
1  49       a  0.953590
2  55       a  0.952150
3  31       b  0.949763
4   4       b  0.931452

【讨论】:

  • 感谢您的帮助,它按我想要的方式工作,现在每个条目都有行和列标签。
  • @Slna:很高兴为您解决问题,很高兴为您提供帮助 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
  • 2018-01-01
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
  • 2020-03-23
相关资源
最近更新 更多