如何将电影数据分组统计的Series转换为自定义列名的DataFrame?
如何将带多级索引的Series转换为指定格式的DataFrame
问题背景
我有一个存储电影信息的DataFrame,关注Production Company(制作公司)和Award(奖项)列。按制作公司分组统计获奖数量后,得到了一个带多级索引的Series,现在需要将它转换成指定列名的DataFrame。
原始操作代码
mv['Award'] = mv['Award'].astype('string') mv['Winners'] = mv['Award'] == 'Winner' mv['Winners']=mv['Winners'].astype('string') mv['Winners'] = mv['Winners'].str.replace('False','') mv['Winners'] = mv['Winners'].notnull() mv['Winners']=mv['Winners'].astype('string') mv['Winners']=mv['Winners'].str.replace('True','Oscar') Number_Award = mv.groupby(['Production Company'])['Winners'].value_counts().sort_values(ascending = False).head(3) print(Number_Award)
原始Series输出
Production Company Winners Paramount Pictures Oscar 33 Warner Bros. Pictures Oscar 29 MGM Home Entertainment Oscar 28 Name: Winners, dtype: int64
转换遇到的问题
使用to_frame()转换后,得到的DataFrame列名不符合需求:
Number_Award = Number_Award.to_frame() Number_Award
输出:
Winners Production Company Winners Paramount Pictures Oscar 33 Warner Bros. Pictures Oscar 29 MGM Home Entertainment Oscar 28
需要转换成以下目标格式:
Production Company Award Number of award Paramount Pictures Oscar 33 Warner Bros. Pictures Oscar 29 MGM Home Entertainment Oscar 28
解决方法
通过重置多级索引并重命名列即可实现需求,以下是两种常用方案:
方案一:reset_index() + 批量重命名列
# 将Series转为DataFrame并重置多级索引为普通列 df_result = Number_Award.reset_index() # 直接指定新列名 df_result.columns = ['Production Company', 'Award', 'Number of award']
方案二:先指定列名再重置索引
# 先将Series转为DataFrame,同时指定数值列的名称 df_result = Number_Award.to_frame(name='Number of award') # 把多级索引转为普通列 df_result = df_result.reset_index() # 重命名原"Winners"列为"Award" df_result.rename(columns={'Winners': 'Award'}, inplace=True)
额外优化建议
你之前生成Winners列的代码可以大幅简化,无需多次转换数据类型:
# 向量化操作一步生成获奖标记列 import numpy as np mv['Winners'] = np.where(mv['Award'] == 'Winner', 'Oscar', '')
内容的提问来源于stack exchange,提问作者Алексей Курочкин
相关产品推荐
相关产品推荐

