Pandas如何删除重复的数据但保留最大值的行

792 阅读2分钟

你可以使用以下方法来删除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中执行其他常见操作:

如何在Pandas中删除重复的行
如何在Pandas中删除重复的列
如何在Pandas中计数重复的