Pandas:如何删除重复行,但保留具有最大值的所有行

4

如何删除重复行,但保留所有具有最大值的行。例如,我有一个包含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'的行):

data = [{'a': 1, 'b': 2, 'c': 3}, {'a': 7, 'b': 2, 'c': 20}, {'a': 7, 'b': 2, 'c': 20}]
df = pd.DataFrame(data)
2个回答

3
您可以使用 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

2

您可以使用 groupbytransform 计算每个组的最大值 c,然后过滤出等于最大值的记录,示例如下:

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

谢谢。我用df = df.loc[df ['c'] == df ['max_c']]替换了第二个命令,然后就可以运行了。 - Tuan Anh
欢迎!如果答案解决了问题,请接受它。 - Franco Piccolo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接