Pandas分组统计后基于计数结果过滤数据及年份均值计算问题
解决分组统计后的过滤与均值计算问题
首先,你遇到的问题核心是分组统计后的结果和原数据的结构不匹配,直接用原DataFrame去索引分组后的Series会因为长度不一致报错。咱们一步步来解决:
1. 正确过滤分组后的计数结果
你之前的分组统计代码是对的,但过滤要直接在分组后的结果上操作,而不是原数据:
# 先完成分组统计,得到每个年份的Rating计数 year_rating_counts = data.groupby('Year')['Rating'].count() # 过滤出计数大于50的记录 filtered_counts = year_rating_counts[year_rating_counts > 50]
这样filtered_counts就是你要的结果,比如会保留2017、2018、2019、2020这些计数超50的年份。
2. 计算过滤后年份的Rating均值
如果你需要计算这些合格年份的Rating均值,有两种高效的方式:
方式一:先过滤原数据,再分组求均值
先提取过滤后的年份列表,再从原数据中筛选出这些年份的记录,最后分组计算均值:
# 获取过滤后的年份 valid_years = filtered_counts.index.tolist() # 筛选原数据中属于这些年份的记录,再分组求均值 year_rating_means = data[data['Year'].isin(valid_years)].groupby('Year')['Rating'].mean()
方式二:一次分组同时计算计数和均值,再过滤
这种方式更高效,只需要一次分组操作,同时得到计数和均值,再按需过滤:
# 分组后同时计算计数和均值 year_stats = data.groupby('Year')['Rating'].agg(count='count', mean_rating='mean') # 过滤出计数大于50的统计结果,同时保留均值 filtered_stats = year_stats[year_stats['count'] > 50]
这样filtered_stats会是一个包含count和mean_rating两列的DataFrame,你可以直接查看或使用这些数据。
为什么你之前的写法失败?
你尝试的data[data.groupby(['Year'])['Rating'].count()<10]之所以不行,是因为groupby('Year')['Rating'].count()返回的是一个以Year为索引的Series,长度等于不同年份的数量;而原DataFramedata的长度是总行数,两者长度不匹配,布尔索引无法对应,所以会报错。
内容的提问来源于stack exchange,提问作者kağan hazal koçdemir
相关产品推荐
相关产品推荐

