Pandas分组聚合后DataFrame显两列但shape仅返回1列问题
分组聚合后索引转列的解决方法
原DataFrame包含release_year和rating两列,想要计算每年的平均rating并返回一个两列的DataFrame,但执行以下代码后:
df = df.groupby('release_year')['rating'].mean() new_df = pd.DataFrame(df)
得到的结果中release_year是DataFrame的索引而非列,调用new_df.shape返回(86, 1),不符合预期。
两种解决方法:
方法一:分组时直接设置不将分组键作为索引
在groupby中添加as_index=False参数,聚合后直接得到包含两列的DataFrame:df = df.groupby('release_year', as_index=False)['rating'].mean()方法二:聚合后将索引转为列
对聚合结果调用reset_index(),把原索引release_year转为普通列:df = df.groupby('release_year')['rating'].mean().reset_index() # 这里不需要再用pd.DataFrame()转换,df已经是两列的DataFrame了
原因说明:
groupby默认会把分组字段(这里是release_year)设置为结果的索引,所以原始代码中聚合后得到的是一个以release_year为索引的Series,转为DataFrame后只有rating一列,因此shape显示为1列。
内容的提问来源于stack exchange,提问作者Cookfishbro
相关产品推荐
相关产品推荐

