假设我有以下数据框:
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
中没有最高值。我想知道如何处理此类案件?
答案 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
另一种方法是将 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