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