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

时间:2017-01-11 00:32:03

标签: python pandas dataframe duplicates

我的数据框有两列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 |     
+----+--------+      

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

这个问题是重复的 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'])    

答案 2 :(得分:1)

对于具有两列以上数据框的更通用的解决方案,您希望所有行都具有每个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