如何在相同类型的项目的列中保留具有最大值的行?

时间:2017-05-10 18:12:51

标签: python pandas dataframe

我有下表:

Item number | crit_A | crit_B|
------------|--------|-------|
     1      |  100   |  20   |
     1      |   10   | 100   |
     1      |   50   |  50   |
     2      |   10   | 100   |
     2      |   90   |  10   |
     2      |   90   |  10   |

我希望pandas数据帧操作只返回第一行和第五行。这对应于给定项目的crit_A最大的行。

Item number | crit_A | crit_B|
------------|--------|-------|
     1      |  100   |  20   |
     2      |   90   |  10   |

注意:当crit_A对于给定项目具有多个相等的值时,我只需要返回一个项目。

以下不是我要找的:

res_82_df.groupby(['Item number']).max()

这不起作用,因为它会按项目编号分组,但会返回所有列的最大值。另请注意:我可以查找任意阈值并执行查询语句。但这种方法也不健全,因为我总是需要查看数据并做出价值判断。

如何有效地完成这项工作?

注意:我的问题确实与上面链接的问题重复。这里的答案非常独特,更加简洁,并按照我的要求行事。

1 个答案:

答案 0 :(得分:4)

我这样做:

In [107]: df.loc[df.groupby('Item number')['crit_A'].idxmax()]
Out[107]:
   Item number  crit_A  crit_B
0            1     100      20
4            2      90      10