Python 熊猫:如何删除重复行,但保留所有行的最大值

Python 熊猫:如何删除重复行,但保留所有行的最大值,python,python-3.x,pandas,dataframe,pandas-groupby,Python,Python 3.x,Pandas,Dataframe,Pandas Groupby,如何删除重复行,但保留所有行的最大值。例如,我有一个包含4行的数据帧: data = [{'a': 1, 'b': 2, 'c': 3},{'a': 7, 'b': 10, 'c': 2}, {'a': 7, 'b': 2, 'c': 20}, {'a': 7, 'b': 2, 'c': 20}] df = pd.DataFrame(data) 从这个数据框中,我希望有一个数据框,如(3行,按“a”分组,将所有具有最大值的行保留在“c”中): 您可以使用groupby和transform计算每

如何删除重复行,但保留所有行的最大值。例如,我有一个包含4行的数据帧:

data = [{'a': 1, 'b': 2, 'c': 3},{'a': 7, 'b': 10, 'c': 2}, {'a': 7, 'b': 2, 'c': 20}, {'a': 7, 'b': 2, 'c': 20}]
df = pd.DataFrame(data)
从这个数据框中,我希望有一个数据框,如(3行,按“a”分组,将所有具有最大值的行保留在“c”中):


您可以使用
groupby
transform
计算每组的
max
c,然后在记录等于max的位置进行筛选,如:

df['max_c'] = df.groupby('a')['c'].transform('max')
df[df['c']==df['max_c']].drop(['max_c'], axis=1)

您可以将
GroupBy
+
transform
与布尔索引一起使用:

res = df[df['c'] == df.groupby('a')['c'].transform('max')]

print(res)

   a  b   c
0  1  2   3
1  7  2  20
2  7  2  20

非常感谢。我将第二个命令替换为df=df.loc[df['c']==df['max_c']],然后它就可以工作了。欢迎!如果答案解决了问题,就接受它。
res = df[df['c'] == df.groupby('a')['c'].transform('max')]

print(res)

   a  b   c
0  1  2   3
1  7  2  20
2  7  2  20