使用groupby的as_index=False转换Series为DataFrame无效问题求助
解决Groupby聚合后列名与格式问题
问题原因
groupby().size()的特性:该方法默认返回无列名的Series,分组字段作为多级索引。旧版pandas中as_index=False参数对size()不生效,即使添加参数仍返回Series;若新版中未生效,大概率是操作疏漏。reset_index()后列名为0:原Series没有自定义列名,重置索引时会默认用数字0作为计数列的名称。
三种可行解决方案
方案1:reset_index时指定列名(最简便)
直接在重置索引时通过name参数指定计数列的名称:
temp = uber_15.groupby(['month', "weekDay"]).size().reset_index(name='size')
方案2:使用agg方法自定义聚合列名
通过agg明确指定聚合规则和列名,配合as_index=False直接生成目标DataFrame:
# 这里的'pickup_datetime'可替换为数据集中任意非空列名 temp = uber_15.groupby(['month', "weekDay"], as_index=False).agg(size=('pickup_datetime', 'size'))
方案3:用count()替代size()并重命名
利用count()对某一列计数,as_index=False会直接生成DataFrame,再重命名列:
temp = uber_15.groupby(['month', "weekDay"], as_index=False)['pickup_datetime'].count() temp.rename(columns={'pickup_datetime': 'size'}, inplace=True)
验证效果
执行上述任一方案后,temp会是目标格式:以month和weekDay为普通列,size为总计值列的DataFrame。
内容的提问来源于stack exchange,提问作者Miskatur rahman
相关产品推荐
相关产品推荐

