你可以使用以下方法来删除pandas DataFrame中的重复数据,但保留包含某一列中最大值的行。
方法1:删除一列中的重复内容并保留包含最大值的行
df.sort_values('var2', ascending=False).drop_duplicates('var1').sort_index()
方法2:删除多列中的重复数据并保留包含最大值的行
df.sort_values('var3', ascending=False).drop_duplicates(['var1', 'var2']).sort_index()
下面的例子展示了如何在实践中使用每种方法:
例1:移除一列中的重复内容并保留最大行数
假设我们有下面这个pandas数据框架,它包含了不同球队的篮球运动员的得分信息:
import pandas as pd
#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
'points': [20, 24, 28, 30, 14, 19, 29, 40, 22]})
#view DataFrame
print(df)
team points
0 A 20
1 A 24
2 A 28
3 B 30
4 B 14
5 B 19
6 C 29
7 C 40
8 C 22
我们可以使用下面的语法来删除有重复队名的行,但保留有最大分值的行:
#drop duplicate teams but keeps row with max points
df_new = df.sort_values('points', ascending=False).drop_duplicates('team').sort_index()
#view DataFrame
print(df_new)
team points
2 A 28
3 B 30
7 C 40
每条有重复队名的行都被删除了,但是每条队的最高分值的行被保留了。
例2:移除多列中的重复内容并保留有最大值的行
假设我们有下面这个pandas数据框架:
import pandas as pd
#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
'position': ['G', 'G', 'F', 'G', 'F', 'F', 'G', 'G', 'F'],
'points': [20, 24, 28, 30, 14, 19, 29, 40, 22]})
#view DataFrame
print(df)
team position points
0 A G 20
1 A G 24
2 A F 28
3 B G 30
4 B F 14
5 B F 19
6 C G 29
7 C G 40
8 C F 22
我们可以使用下面的语法来删除有重复的球队 和 位置名称的行,但保留有最大积分值的行:
#drop rows with duplicate team and positions but keeps row with max points
df_new = df.sort_values('points', ascending=False).drop_duplicates(['team', 'position']).sort_index()
#view DataFrame
print(df_new)
team position points
1 A G 24
2 A F 28
3 B G 30
5 B F 19
7 C G 40
8 C F 22
每个有重复的球队和位置名称的行都被删除了,但是对于每个球队和位置的组合来说,具有最大积分值的行都被保留了。
其他资源
下面的教程解释了如何在pandas中执行其他常见操作: