当前位置: 首页 > 知识库问答 >
问题:

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

充煌
2023-03-14

我有一个数据框,有两列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个答案

居英资
2023-03-14

对于具有两列以上的数据帧,一种更通用的解决方案,您希望所有行都具有每个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
曾嘉瑞
2023-03-14

这个问题与Python是重复的:使用groupby获取组中具有最大值的行

这是一条单行线:

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

这里还有一个:

df.sort_values('salary', ascending=False).drop_duplicates(['ID'])    
谷梁浩思
2023-03-14

您可以对'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

 类似资料:
  • 我有一个这样的数据帧(): 我想基本上删除重复记录,以便字段是唯一的。我不关心被丢弃的记录,在这种情况下,地址已经被删除,所以唯一通过的是拼写错误。我想要以下结果的数据框: 在R中,基本上是这样做的: 但是我需要一种方法在熊猫身上做到这一点。

  • 我有一个这样的专栏: 我希望专栏看起来像这样: 只希望保留重复记录的第一个或最后一个。 目前,我使用的是: 但它不起作用。我错过了什么吗?

  • 我有两张桌子——桌子1和桌子2。 它们有相同的列——Col1、Col2、Col3、Col4(整数)。 我将Table_2行插入Table_1。 表_1和表_2有一些基于Col1和Col2的重复值。我需要保留表_2的值,并删除表_1的重复值。 例如: 我尝试了以下方法-

  • 当日期列的值在日期列表中时,我想从熊猫数据帧中删除行。以下代码不起作用: 我得到以下错误: ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。

  • 我有一个数据集,我想根据该行的2或列值从数据框中删除行。例如-我有关于美国所有电视节目的数据帧,我需要根据电视节目的季节和剧集删除电视节目的特定行。就像我需要删除高谭市电视台的行,但只删除包含第四季和第十集的行。 如果我能在这方面得到帮助,我将不胜感激。

  • 问题内容: 我有一个像这样的json数据: 从中,我必须使用删除一个重复的条目,与情况相同, 结果如下: 怎么可能 问题答案: