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

时间:2016-04-02 19:47:01

标签: python pandas

我有一个包含许多列的Pandas数据框,其中两个是"电影标题"和#34;年龄",我想找到排名最低的前五部电影,但只包括至少有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

它可以位于相同或新的数据框中。谢谢你的帮助!

2 个答案:

答案 0 :(得分:4)

说你做

agg = df.age.groupby([df['movie title']]).agg({'ave_age': 'mean', 'size': 'size'})

您将获得包含ave_agesize列的DataFrame。

agg[agg['size'] > 100]

只会为您提供超过100个用户。从那里开始,按agg.ave_age排序,然后排在前5位。它应该是这样的:

agg[agg['size'] > 100].sort_values(by='ave_age', ascending=True).head(5)

答案 1 :(得分:3)

过滤器为每部电影创建一个标志,如果电影标题数量超过一百,则设置为True,否则为False。

n = 100
filter = (df.groupby(['movie title'])['age']
          .transform(lambda group: group.count()) >= n)

鉴于您的示例数据规模较小,我会将n设置为2并创建我的过滤器。

现在我只过滤计数超过n的电影,计算每组的平均年龄,然后选择最小的五个(即最低年龄)。

>>> df[filter.values].groupby('movie title').age.mean().nsmallest(5)
movie title
Title 2    12
Title 3    13
Name: age, dtype: int64