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