首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除ID总数的行不等于Python中的特定数目

删除ID总数的行不等于Python中的特定数目
EN

Data Science用户
提问于 2022-07-20 08:37:43
回答 1查看 102关注 0票数 -1

我在Pandas中有以下数据框架:

代码语言:javascript
复制
ID   rank   feature
1    1      3
1    2      6
1    3      8
1    4      6
2    1      2
2    2      9
3    1      0
3    2      3
3    3      1
4    1      3
4    2      9
4    3      0
4    4      5
4    5      1
5    1      2 
5    2      4
5    3      0
5    4      8

我想删除所有行,使ID中出现的行数不等于4。例如,ID 1发生4次,ID 2发生2次,ID 3发生3次,ID 4发生5次,ID 5发生4次。因此,我想删除ID = 2,3,4的行,输出如下:

代码语言:javascript
复制
ID   rank   feature
1    1      3
1    2      6
1    3      8
1    4      6
5    1      2 
5    2      4
5    3      0
5    4      8

有什么计算效率高的方法吗?非常感谢。

EN

回答 1

Data Science用户

回答已采纳

发布于 2022-07-20 08:47:29

您可以使用groupbytransform来计算每个ID出现的次数,然后使用简单的筛选来获得您想要的结果:

代码语言:javascript
复制
import pandas as pd

df = pd.DataFrame({
    "ID" : [1, 1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5],
    "rank": [1, 2, 3, 4, 1, 2, 1, 2, 3, 1, 2, 3, 4, 5, 1, 2, 3, 4],
    "feature": [3, 6, 8, 6, 2, 9, 0, 3, 1, 3, 9, 0, 5, 1, 2, 4, 0, 8]
})

(
    df
    # count number of occurences and select only those rows whose ID is present 4 times
    .loc[lambda x: x.groupby("ID")["ID"].transform("count") == 4]
)

返回:

代码语言:javascript
复制
 ID  rank  feature
  1     1        3
  1     2        6
  1     3        8
  1     4        6
  5     1        2
  5     2        4
  5     3        0
  5     4        8
票数 1
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/112820

复制
相关文章

相似问题

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