基于两列删除重复项并根据另一列的值保留出现次数

时间:2021-03-03 12:16:24

标签: 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']
})

我想删除基于 col1col4 两列的重复列,并保留在 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 中没有最高值。我想知道如何处理此类案件?

1 个答案:

答案 0 :(得分:1)

您可以先按 col3 然后按 drop_duplicates 对您的值进行排序,并使用 subset 参数和 keep 我们将设置为最后。

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

另一种方法是将 groupbyidxmax 一起使用

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