我有下表:
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()
这不起作用,因为它会按项目编号分组,但会返回所有列的最大值。另请注意:我可以查找任意阈值并执行查询语句。但这种方法也不健全,因为我总是需要查看数据并做出价值判断。
如何有效地完成这项工作?
注意:我的问题确实与上面链接的问题重复。这里的答案非常独特,更加简洁,并按照我的要求行事。
答案 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