我有一个熊猫DataFrame,假设它名为“ df”,其中所有列(浮点数)中都有数字值。我想从数据框中检索前5个最高绝对值,以及它们的行和列标签。
我看到了如下建议:
df.abs().stack().nlargest(5)
但是stack
方法不会为所有元素保留行和列标签,它枚举一个轴,对于每个元素,然后枚举另一个轴,之前是空白元素。我需要列和行的值和名称。
我知道我可以通过以下方式来做到这一点:遍历每一列,然后遍历其中的每一行,然后访问该值并附加到3个列表中,一个带有行名,另一个带有列名,第三个带有值,然后复制values列表具有绝对值的第四个列表,使用最后一个列表获取5个最高值的位置,并使用这些位置索引前3个列表的索引,从而获取行名,列名和值。虽然必须有一种更好,更紧凑和更pythonic的方法,但是我严重无法在任何地方找到它,而且我通常擅长解决问题。
答案 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