Python 基于两列删除重复项并基于另一列保留引用';s值

Python 基于两列删除重复项并基于另一列保留引用';s值,python,pandas,Python,Pandas,假设我有以下数据帧: df = pd.DataFrame({ 'col1': ['a', 'b','a', 'a', 'c', 'a'], 'col2': ['x1', 'y1','x2', 'x2', 'x2', 'x2'], 'col3': [1, 2, 5, 3, 3, 3], 'col4': ['m', 'n', 'm', 'm', 'm', 'n'] }) 我想删除基于col1和col4两列的重复列,并保留col3上值最高的列。结果应该如下所示:

假设我有以下数据帧:

df = pd.DataFrame({
    'col1': ['a', 'b','a', 'a', 'c', 'a'],
    'col2': ['x1', 'y1','x2', 'x2', 'x2', 'x2'],
    'col3': [1, 2, 5, 3, 3, 3],
    'col4': ['m', 'n', 'm', 'm', 'm', 'n']
})
我想删除基于
col1
col4
两列的重复列,并保留
col3
上值最高的列。结果应该如下所示:

  col1 col2  col3 col4
0    b   y1     2    n
1    a   x2     5    m
2    c   x2     3    m
3    a   x2     3    n

我尝试了
df.drop_duplicates(subset=['col1','col4'])
默认情况下,这会保留第一次出现。另外,如果我执行
df.drop_duplicates(subset=['col1','col4'],keep='last')
操作,它会返回错误的结果,因为最后一次出现的值在
col3
中没有最高值。我想知道如何处理这种情况?

您可以首先按
col3
对值进行排序,然后
删除重复项
,并使用
子集
参数和
保留
,我们将其设置为最后一个

df1 = df.sort_values('col3').drop_duplicates(subset=['col1','col4'],keep='last')

print(df1)

  col1 col2  col3 col4
1    b   y1     2    n
4    c   x2     3    m
5    a   x2     3    n
2    a   x2     5    m
另一种方法是使用
groupby
idxmax

df.loc[df.groupby(['col1','col4'])['col3'].idxmax()]

  col1 col2  col3 col4
2    a   x2     5    m
5    a   x2     3    n
1    b   y1     2    n
4    c   x2     3    m