Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在数据帧中查找重复值的计数和排序_Python_Pandas - Fatal编程技术网

Python 在数据帧中查找重复值的计数和排序

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

我有一个熊猫数据框,有很多列,其中两列是“电影标题”和“年龄”,我想找到排名前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     # 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