Python 选择根计数为3次的行

Python 选择根计数为3次的行,python,pandas,dataframe,Python,Pandas,Dataframe,这里有一个例子: df = pd.DataFrame({ 'file':['f1','f2','f3','f4','f5','f6','f7','f8','f9','f10','f11','f12'], 'root':['root1','root1','root1','root2','root2','root2','root3','root4','root5','root6','root6','root6'], }) 我需要这样的输出: file root 0

这里有一个例子:

df = pd.DataFrame({
    'file':['f1','f2','f3','f4','f5','f6','f7','f8','f9','f10','f11','f12'],
    'root':['root1','root1','root1','root2','root2','root2','root3','root4','root5','root6','root6','root6'],
})

我需要这样的输出:

    file    root
0   f1  root1
1   f2  root1
2   f3  root1
3   f4  root2
4   f5  root2
5   f6  root2
9   f10 root6
10  f11 root6
11  f12 root6

因为root1/root2/root3在列中计数3次

您可以在groupby上使用转换“计数”:

输出:

   file   root
0    f1  root1
1    f2  root1
2    f3  root1
3    f4  root2
4    f5  root2
5    f6  root2
9   f10  root6
10  f11  root6
11  f12  root6
您可以在groupby上使用转换“计数”:

输出:

   file   root
0    f1  root1
1    f2  root1
2    f3  root1
3    f4  root2
4    f5  root2
5    f6  root2
9   f10  root6
10  f11  root6
11  f12  root6
你可以:

mask = (df.groupby('root').transform('count').eq(3)).squeeze()
print(df[mask])
输出

你可以:

mask = (df.groupby('root').transform('count').eq(3)).squeeze()
print(df[mask])
输出

此API是groupby对象的筛选方法。

传递一个可调用的过滤器,该过滤器接受数据帧作为参数,并返回布尔值。groupby然后只返回可调用函数返回True的组

此API是groupby对象的筛选方法。


传递一个可调用的过滤器,该过滤器接受数据帧作为参数,并返回布尔值。groupby然后只返回那些可调用的返回True的组

use map+value\u计数似乎更快的组。我相信我可以想出几种更快的方法。但这是最简单的直接方法,因为此方法是由开发人员专门为此目的创建的。而且,对于99%的用户来说,速度不是问题。更正,可能是95%的用户。这似乎较慢,但实际上并非如此,这只是因为比较>2而不是==3使用地图+值计数似乎更快。我肯定我可以想出几种更快的方法。但这是最简单的直接方法,因为此方法是由开发人员专门为此目的创建的。而且,对于99%的用户来说,速度不是问题。更正,可能是95%的用户。这似乎较慢,但实际上并非如此,这仅仅是因为比较>2而不是==3使用地图+值\u计数似乎较快使用地图+值\u计数似乎较快
df.groupby('root').filter(lambda x: x.size > 2)

   file   root
0    f1  root1
1    f2  root1
2    f3  root1
3    f4  root2
4    f5  root2
5    f6  root2
9   f10  root6
10  f11  root6
11  f12  root6