首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除pandas数据帧中的重复项,但保留基于特定列值的行

如何删除pandas数据帧中的重复项,但保留基于特定列值的行
EN

Stack Overflow用户
提问于 2021-02-02 03:10:28
回答 3查看 980关注 0票数 0

我有一个有NBA球员统计数据的pandas数据框,我想删除重复的球员行。有重复的,因为有些球员在2020-2021赛季在多支球队踢球,我想删除这些重复的东西。然而,对于这些在多个球队踢球的球员,还会有一个行,其中包含该球员在所有球队的组合统计数据和团队标签'TOT',这表示该球员在本赛季在两支或更多球队比赛的事实。当我删除重复的球员时,我希望与“TOT”团队的行保留下来,而所有其他重复的球员都消失了。我不确定如何指定要删除所有重复项,但将复制项保留在df‘’Team‘= 'TOT’的位置。

下面是我的数据帧的样子:Dataframe

在本例中,我想删除球员'Jarrett Allen‘的副本,但保留Jarrett Allen的行,其中他的团队(Tm)是'TOT’。

EN

回答 3

Stack Overflow用户

发布于 2021-02-02 03:55:58

您可以只过滤掉不必要的行:

代码语言:javascript
复制
df = df.loc[(df['Rk'].duplicated(keep=False) == False) | (df['Tm'] == 'TOT'), :]

可以这样理解:从我的数据帧中取出列'Rk‘中没有重复的所有行,或者列'Tm’中有'TOT‘的行。

":“末尾的意思是你想要取所有列。

票数 1
EN

Stack Overflow用户

发布于 2021-02-02 03:49:51

一种方法是使用帮助器列。例如利用下面的df,

代码语言:javascript
复制
    player  stats team
0      bob      1  ABC
1    alice      2  DEF
2  charlie      3  GHI
3     mary      4  JKL
4     mary      5  MNO
5     mary      6  TOT
6      bob      7  TOT
7      bob      8  VWX

如果'team‘值为'TOT’,则创建一个hte值为True的列,否则将导致:

代码语言:javascript
复制
import numpy as np

df['multiple_teams'] = np.where(df['team']=='TOT', 'TOT', None)

    player  stats team  multiple_teams
1    alice      2  DEF           False
0      bob      1  ABC           False
6      bob      7  TOT            True
7      bob      8  VWX           False
2  charlie      3  GHI           False
3     mary      4  JKL           False
4     mary      5  MNO           False
5     mary      6  TOT            True

现在我们可以使用drop_duplicates() functionkeep参数来决定要保留的内容。在这种情况下,我们可以通过使用keep=False删除基于playermultiple_teams子集的值来获得所需的结果。这将意味着跨两列的所有重复项都将从df中删除。结果是:

代码语言:javascript
复制
    player  stats team  multiple_teams
1    alice      2  DEF           False
6      bob      7  TOT            True
2  charlie      3  GHI           False
5     mary      6  TOT            True
票数 0
EN

Stack Overflow用户

发布于 2021-02-02 04:01:27

您可以使用key参数对DataFrame进行sort,这样'TOT'将排序到底部,然后是drop_duplicates,保留最后一个。

这保证了最终每个球员只有一个行,即使数据很乱,可能有多个'TOT'行,一支球队和一个'TOT'行,或者多个球队和多个'TOT'行。

代码语言:javascript
复制
df = (df.sort_values('team', key=lambda x: x.eq('TOT'))
        .drop_duplicates('player', keep='last'))

代码语言:javascript
复制
print(df)
#    player  stats team
#0    alice      2  DEF
#1      bob      7  TOT
#2      bob      1  ABC
#3  charlie      3  GHI
#4     mary      4  JKL
#5     mary      5  MNO
#6     mary      6  TOT

df = (df.sort_values('team', key=lambda x: x.eq('TOT'))
        .drop_duplicates('player', keep='last'))

print(df)
#    player  stats team
#0    alice      2  DEF
#3  charlie      3  GHI
#1      bob      7  TOT
#6     mary      6  TOT
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65998730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档