我在Pandas中有以下数据框架:
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的行,输出如下:
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有什么计算效率高的方法吗?非常感谢。
发布于 2022-07-20 08:47:29
您可以使用groupby和transform来计算每个ID出现的次数,然后使用简单的筛选来获得您想要的结果:
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]
)返回:
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 8https://datascience.stackexchange.com/questions/112820
复制相似问题