首页 > 解决方案 > 如何从共享两个公共列的一组行中选择一列中具有最大值的熊猫行?

问题描述

下面的 Pandas DataFramedf有 5 列,有颜色,而索引号在最左边是黑色的。

在此处输入图像描述

请注意最后两列(我们称它们为col4col5)具有静态数字,表示数据的段、组或块。其他组(在这两列中更改其静态编号)已从屏幕截图中隐藏。

如何挑出第三列(称为)中具有最大值的行或行的索引,col3用黑色圈出:1.90977,条件是最后两行是静态的?换句话说,挑出组中最好的行

寻找这样的东西,这是行不通的:

df.loc[(df['col3'] == 0.999141) & (df['col4'] == 0.000861559)]

标签: pythonpandasdataframeindexing

解决方案


如果不是最后 2 列具有相同的值,则以某种精度用于选择列,也可以通过掩码和列名numpy.isclose更好地选择性能:DataFrame.loc

df.loc[np.isclose(df['col4'], 0.999141) & np.isclose(df['col5'], 0.000861559), 'col3'].max()

对于最大值使用索引Series.idxmax

df.loc[np.isclose(df['col4'], 0.999141) & np.isclose(df['col5'], 0.000861559), 'col3'].idxmax()

按最大col4和最小col5用途选择:

df.loc[df['col4'].eq(df['col4'].max()) & df['col5'].eq(df['col5'].min()), 'col3'].max()

df.loc[df['col4'].eq(df['col4'].max()) & df['col5'].eq(df['col5'].min()), 'col3'].idxmax()

推荐阅读