使用条件删除数据框中一列上的重复值[重复]
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
【讨论】:
以上是关于使用条件删除数据框中一列上的重复值[重复]的主要内容,如果未能解决你的问题,请参考以下文章