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

Posted

技术标签:

【中文标题】Pandas:如何删除重复的行,但保留所有行的最大值[重复]【英文标题】:Pandas: how to remove duplicate rows, but keep ALL rows with max value [duplicate] 【发布时间】:2019-04-06 11:08:34 【问题描述】:

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

【问题讨论】:

【参考方案1】:

您可以使用groupbytransform 计算每个组的max 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']] 替换第二个命令,然后它就可以工作了。 欢迎您!如果它解决了问题,请接受答案。【参考方案2】:

您可以将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

【讨论】:

以上是关于Pandas:如何删除重复的行,但保留所有行的最大值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如果它们是奇怪的,如何删除重复的行,否则保留一个

有条件地删除重复的pandas python

有条件地删除重复的pandas python

pandas数据处理

python pandas:删除A列的重复项,保留B列中具有最高值的行

从数据框中删除重复项,基于两列 A,B,在另一列 C 中保持具有最大值的行