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