使用条件删除数据框中一列上的重复值[重复]

Posted

技术标签:

【中文标题】使用条件删除数据框中一列上的重复值[重复]【英文标题】:Remove duplicates values on one column in a data frame using conditions [duplicate] 【发布时间】:2017-05-25 15:40:50 【问题描述】:

我有一个包含两列 ID 和 Salary 的数据框

data = 'ID':[1,2,3,4,2],'salary':[1e3,1.2e3,1e3,2e3,1.5e3]

+----+--------+  
| ID | salary |  
+----+--------+  
| 1  | 1000.0 |  
+----+--------+  
| 2  | 1200.0 |  
+----+--------+  
| 3  | 1000.0 |  
+----+--------+      
| 4  | 2000.0 |     
+----+--------+      
| 2  | 1500.0 |  
+----+--------+  

在此数据框中,某些 ID 重复,在这种情况下 ID=2。 我想保留每个重复 ID 的最高工资。

+----+--------+  
| ID | salary |  
+----+--------+  
| 1  | 1000.0 |  
+----+--------+  
| 2  | 1500.0 |  
+----+--------+  
| 3  | 1000.0 |  
+----+--------+      
| 4  | 2000.0 |     
+----+--------+      

【问题讨论】:

【参考方案1】:

您可以在'ID' 上执行groupby 并取最大值:

df = df.groupby('ID', as_index=False)['salary'].max()

结果输出:

   ID  salary
0   1  1000.0
1   2  1500.0
2   3  1000.0
3   4  2000.0

【讨论】:

【参考方案2】:

这个问题是重复的 Python : Getting the Row which has the max value in groups using groupby

这是一个单行:

df.groupby('ID', sort=False)['salary'].max()

还有一个:

df.sort_values('salary', ascending=False).drop_duplicates(['ID'])    

【讨论】:

【参考方案3】:

对于具有两列以上的数据框的更通用的解决方案,您希望所有行都具有每个 id 的最大薪水。

data = 'ID':[1,2,3,4,2],'salary':[1e3,1.2e3,1e3,2e3,1.5e3]
df = pd.DataFrame(data).assign(more_data=range(5))

df.loc[df.groupby('ID').salary.idxmax()]

   ID  salary  more_data
0   1  1000.0          0
4   2  1500.0          4
2   3  1000.0          2
3   4  2000.0          3

【讨论】:

以上是关于使用条件删除数据框中一列上的重复值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从数据框中删除“重复”行(它们在几列中有所不同)[重复]

怎么去除datatable 中一列的重复值【急】

从数据框中删除重复项,基于两列 A,B,在另一列 C 中保持具有最大值的行

两列上的 BigQuery 重复数据删除作为唯一键

怎么去除datatable 中一列的重复值【急】

根据“不在”条件从数据框中删除行[重复]