Pandas数据框-而不是按列或按行获取数据框的前5个整体值及其行和列标签

时间:2020-08-18 01:51:06

标签: python pandas dataframe

我有一个熊猫DataFrame,假设它名为“ df”,其中所有列(浮点数)中都有数字值。我想从数据框中检索前5个最高绝对值,以及它们的行和列标签。

我看到了如下建议:

df.abs().stack().nlargest(5)

但是stack方法不会为所有元素保留行和列标签,它枚举一个轴,对于每个元素,然后枚举另一个轴,之前是空白元素。我需要列和行的值和名称。

我知道我可以通过以下方式来做到这一点:遍历每一列,然后遍历其中的每一行,然后访问该值并附加到3个列表中,一个带有行名,另一个带有列名,第三个带有值,然后复制values列表具有绝对值的第四个列表,使用最后一个列表获取5个最高值的位置,并使用这些位置索引前3个列表的索引,从而获取行名,列名和值。虽然必须有一种更好,更紧凑和更pythonic的方法,但是我严重无法在任何地方找到它,而且我通常擅长解决问题。

1 个答案:

答案 0 :(得分: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