栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【应用】【python】快速有效修改groupby后的列名

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【应用】【python】快速有效修改groupby后的列名

     我们在使用pandas的groupby方法做统计分析时,发现聚合后的列名是MultiIndex类型。此时,必须通过元组的复合索引方式,才能有效提取列的信息。

下面,将以一个具体的实例,来说明如何快速、有效的修改MultiIndex格式的列名。


首先,创建一个Dataframe类型的数据data:

import pandas as pd

# 首先构造一个Dataframe
data = pd.Dataframe([["小明", "英语", "80"],
                     ["小明", "数学", "70"],
                     ["小明", "语文", "81"],
                     ["小红", "英语", "80"],
                     ["小红", "英语", "95"]], columns=["name", "subject", "score"])
print(data)
print(data.columns)

此时,打印data的列名,是Index格式。并且,可以直接通过rename方法重命名columns,这里就不作演示。

  name subject score
0   小明      英语    80
1   小明      数学    70
2   小明      语文    81
3   小红      英语    80
4   小红      英语    95
Index(['name', 'subject', 'score'], dtype='object')

如果使用groupby方法,对每个人的学科得分做一个求和(sum)和平均(mean):

import pandas as pd

# 首先构造一个Dataframe
data = pd.Dataframe([["小明", "英语", "80"],
                     ["小明", "数学", "70"],
                     ["小明", "语文", "81"],
                     ["小红", "英语", "80"],
                     ["小红", "英语", "95"]], columns=["name", "subject", "score"])

# 对data做统计:求和、均值
data_groupby = data.groupby(["name", "subject"]).agg({"score": ["sum", "mean"]})

print(data_groupby)
print("n")
print(data_groupby.columns)

此时,data_groupby的columns类型,变成MultiIndex。

             score        
               sum    mean
name subject              
小明   数学         70    70.0
     英语         80    80.0
     语文         81    81.0
小红   英语       8095  4047.5


MultiIndex([('score',  'sum'),
            ('score', 'mean')],
           )

如果使用rename方法,对列名重命名,发现并不起作用。

import pandas as pd

# 首先构造一个Dataframe
data = pd.Dataframe([["小明", "英语", "80"],
                     ["小明", "数学", "70"],
                     ["小明", "语文", "81"],
                     ["小红", "英语", "80"],
                     ["小红", "英语", "95"]], columns=["name", "subject", "score"])
# 对data做统计:求和、均值
data_groupby = data.groupby(["name", "subject"]).agg({"score": ["sum", "mean"]})
# 重命名列名:不起作用
data_groupby.rename({("score", "sum"): "score_sum", ("score", "mean"): "score_mean"}, inplace=True)

print(data_groupby.columns)

MultiIndex([('score',  'sum'),
            ('score', 'mean')],
           )

所以,我们通过遍历columns的方式,将MultiIndex的一级和二级索引拼接在一起,作为data的新列名。

import pandas as pd

# 首先构造一个Dataframe
data = pd.Dataframe([["小明", "英语", "80"],
                     ["小明", "数学", "70"],
                     ["小明", "语文", "81"],
                     ["小红", "英语", "80"],
                     ["小红", "英语", "95"]], columns=["name", "subject", "score"])
# 对data做统计:求和、均值
data_groupby = data.groupby(["name", "subject"]).agg({"score": ["sum", "mean"]})
# 重命名列名:不起作用
# data_groupby.rename({("score", "sum"): "score_sum", ("score", "mean"): "score_mean"}, inplace=True)

# 重命名列名
data_groupby.columns = [i[0] + "_" + i[1] for i in data_groupby.columns]


print(data_groupby.columns)

Index(['score_sum', 'score_mean'], dtype='object')

这样的话,完美变为我们想要的列名。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/741615.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号