我的 Pandas 数据框为:

df

Id      Name        CaseId       Value
82      A1          case1.01     37.71
1558    A3          case1.01     27.71
82      A1          case1.06     29.54
1558    A3          case1.06     29.54
82      A1          case1.11     12.09
1558    A3          case1.11     32.09
82      A1          case1.16     33.35
1558    A3          case1.16     33.35

对于每个ID,名称对,我需要选择具有最大值的CaseId。

即我正在寻找以下输出:
Id      Name        CaseId       Value
82      A1          case1.01     37.71
1558    A3          case1.16     33.35

我尝试了以下方法:
import pandas as pd
pd.pivot_table(df, index=['Id', 'Name'], columns=['CaseId'], values=['Value'], aggfunc=[np.max])['amax']

但是它所做的只是为每个CaseId作为列提供最大值,而不是我在上面寻求的结果。

最佳答案

sort_values + drop_duplicates

df.sort_values('Value').drop_duplicates(['Id'],keep='last')
Out[93]:
     Id Name    CaseId  Value
7  1558   A3  case1.16  33.35
0    82   A1  case1.01  37.71

由于我们发布的时间相同,因此添加了更多方法
df.sort_values('Value').groupby('Id').tail(1)
Out[98]:
     Id Name    CaseId  Value
7  1558   A3  case1.16  33.35
0    82   A1  case1.01  37.71

08-27 10:58