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】:您可以使用groupby
和transform
计算每个组的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:如何删除重复的行,但保留所有行的最大值[重复]的主要内容,如果未能解决你的问题,请参考以下文章