【问题标题】: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 |     
+----+--------+      

【问题讨论】:

    标签: python pandas dataframe duplicates


    【解决方案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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-12-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多