Pandas:如何删除重复项,同时保留具有最大值的行
您可以使用以下方法删除 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:删除列中的重复项并保留具有 Max 的行
假设我们有以下 pandas DataFrame,其中包含有关来自不同球队的篮球运动员得分的信息:
import pandas as pd #createDataFrame 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 to 20 1 to 24 2 to 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 to 28
3 B 30
7 C 40
删除具有重复团队名称的每一行,但为每个团队保留具有最大分值的行。
示例 2:删除多列中的重复项并保留具有 Max 的行
假设我们有以下 pandas DataFrame:
import pandas as pd #createDataFrame 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 AG 20 1 GA 24 2AF 28 3 BG 30 4 BF 14 5 BF 19 6 GC 29 7 GC 40 8 CF 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 GA 24
2AF 28
3 BG 30
5 BF 19
7 GC 40
8 CF 22
删除具有重复团队和位置名称的每一行,但为每个团队和位置组合保留具有最大分值的行。
其他资源
以下教程解释了如何在 pandas 中执行其他常见操作: