Python 在数据帧中查找重复值的计数和排序
我有一个熊猫数据框,有很多列,其中两列是“电影标题”和“年龄”,我想找到排名前5位的电影,它们的平均年龄最低,但只包括至少有100个收视率的电影(所以至少有100行) 例如:Python 在数据帧中查找重复值的计数和排序,python,pandas,Python,Pandas,我有一个熊猫数据框,有很多列,其中两列是“电影标题”和“年龄”,我想找到排名前5位的电影,它们的平均年龄最低,但只包括至少有100个收视率的电影(所以至少有100行) 例如: movie title age Title 1 10 Title 2 12 Title 2 12 Title 3 13 Title 3 13 Title 3 13 应成为: movie title
movie title age
Title 1 10
Title 2 12
Title 2 12
Title 3 13
Title 3 13
Title 3 13
应成为:
movie title # of ratings avg age
Title 1 1 10
Title 2 2 12
Title 3 3 13
它可以在相同的数据帧中,也可以在新的数据帧中。谢谢你的帮助 说你喜欢
agg = df.age.groupby([df['movie title']]).agg({'ave_age': 'mean', 'size': 'size'})
您将得到一个包含列ave_age
和size
的数据框
agg[agg['size'] > 100]
将只提供那些用户数超过100的用户。从这里开始,按累计平均年龄排序,排在前5位。它应该是这样的:
agg[agg['size'] > 100].sort_values(by='ave_age', ascending=True).head(5)
如果电影标题计数超过100,过滤器将为每部电影创建一个设置为True的标志,否则设置为False
n = 100
filter = (df.groupby(['movie title'])['age']
.transform(lambda group: group.count()) >= n)
鉴于示例数据的大小较小,我将n
设置为2并创建我的过滤器
现在我只需筛选计数超过n
的电影,计算每组的平均年龄,然后取最小的五个(即最低年龄)
看看群比。我相信
df.title
会抛出一个错误,并且无论如何都不需要。另外,size
是数据帧属性,因此您可能需要使用不同的变量名ascending=True
是默认的参数值,因此不是必需的,但是显式表示也没有什么坏处。谢谢,@Alexander你是对的-更正了。我相信pd.read\u clipboard()
在这个特定的例子中做了一些奇怪的事情。因此,我做了一些修改,显然弄错了一个。我相信你们想要agg=df.groupby('movietitle')。age.agg(…)
谢谢,伙计们@Alexander,不幸的是,我只能对你的答案投一次赞成票。我确实喜欢这两种解决方案,所以我想比较它们的速度:Ami的-100个循环,每个循环最好3:6.56毫秒,Alexander的-100个循环,最佳3:16.9毫秒/循环
在groupby之后是否可以直接使用“筛选”方法?在我运行该方法时,它似乎不会筛选出评级低于100的电影?如果数据帧只有“电影标题”和“年龄”列,则该方法有效。请参见上面的“编辑”以获取修复。
>>> df[filter.values].groupby('movie title').age.mean().nsmallest(5)
movie title
Title 2 12
Title 3 13
Name: age, dtype: int64