Python小案例(二)长宽表转换

Python小案例(二)长宽表转换

在日常与运营、产品打交道时,你会发现他们提供给数分的Excel大多数是宽表,而数分提供给业务的多是长表。因此进行长宽表转换就显得很有必要性了。

import pandas as pd

长表转宽表

# 构造长表数据
df_len = pd.DataFrame(
    {'阶段':['小学','小学','小学','小学','小学','小学','小学','小学','小学','初中','初中','初中','初中','初中','初中'],
        '科目':['英语','英语','英语','语文','语文','语文','数学','数学','数学','数学','数学','数学','语文','语文','语文'],
        '基础':[10,10,10,2,2,2,8,8,8,5,5,5,6,6,6],
        '等级':['一级','二级','三级','一级','二级','三级','一级','二级','三级','一级','二级','三级','一级','二级','三级'],
         '加成':[3.2,1.7,3.1,3.6,2.8,4,2.2,2.1,1.7,1.2,2,2.4,2.7,1.3,1.9]})

df_len.head()
阶段 科目 基础 等级 加成
0 小学 英语 10 一级 3.2
1 小学 英语 10 二级 1.7
2 小学 英语 10 三级 3.1
3 小学 语文 2 一级 3.6
4 小学 语文 2 二级 2.8

groupby方式

result = df_len.groupby(['阶段', '科目', '基础', '等级'])['加成'].max().unstack(3).dropna(axis=0, 
                        how='any').reset_index().rename_axis([None], axis=1)
order = ['阶段', '科目', '基础', '一级', '二级', '三级']
result[order].to_excel('wide_table.xlsx', index=None)

# 转换后结果
result[order]
阶段 科目 基础 一级 二级 三级
0 初中 数学 5 1.2 2.0 2.4
1 初中 语文 6 2.7 1.3 1.9
2 小学 数学 8 2.2 2.1 1.7
3 小学 英语 10 3.2 1.7 3.1
4 小学 语文 2 3.6 2.8 4.0

pivot_table方式

result = df_len.pivot_table(index=['阶段', '科目', '基础'],
                  columns=['等级'],
                  values=['加成']).reset_index()

result = result.set_index(['阶段', '科目', '基础'])
result.columns = result.columns.droplevel(0)
result = result.reset_index().rename_axis([None], axis=1)
order = ['阶段', '科目', '基础', '一级', '二级', '三级']
result[order].to_excel('wide_table.xlsx', index=None)

# 转换后结果
result[order]
阶段 科目 基础 一级 二级 三级
0 初中 数学 5 1.2 2.0 2.4
1 初中 语文 6 2.7 1.3 1.9
2 小学 数学 8 2.2 2.1 1.7
3 小学 英语 10 3.2 1.7 3.1
4 小学 语文 2 3.6 2.8 4.0

宽表转长表

df_wide = pd.read_excel('wide_table.xlsx', index_col=[0,1,2]) # 将维度转为索引,即阶段、科目、基础

# 转换前示例
df_wide.head()
一级 二级 三级
阶段 科目 基础
初中 数学 5 1.2 2.0 2.4
语文 6 2.7 1.3 1.9
小学 数学 8 2.2 2.1 1.7
英语 10 3.2 1.7 3.1
语文 2 3.6 2.8 4.0
result = pd.DataFrame(df_wide.stack()).reset_index()
result.columns = ['阶段', '科目', '基础', '等级', '加成']

# 转换后结果
result.head()
阶段 科目 基础 等级 加成
0 初中 数学 5 一级 1.2
1 初中 数学 5 二级 2.0
2 初中 数学 5 三级 2.4
3 初中 语文 6 一级 2.7
4 初中 语文 6 二级 1.3

共勉~

#数据分析教程##数据分析师工作#
数据分析实用手册 文章被收录于专栏

微信知乎搜索HsuHeinrich,第一时间更新~ 最真实的数据分析教程,SQL、Python、Tableau、Excel、数据基建、BI报表、埋点、专题分析、数据挖掘、A/B试验。日常分析师涉及的方方面面,这里都有~

全部评论

相关推荐

Edgestr:没项目地址就干脆把那一栏删了呗
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
2842次浏览 41人参与
# HR最不可信的一句话是__ #
970次浏览 31人参与
# MiniMax求职进展汇总 #
24762次浏览 321人参与
# 春招至今,你的战绩如何? #
14169次浏览 133人参与
# AI面会问哪些问题? #
859次浏览 21人参与
# 你的实习产出是真实的还是包装的? #
2541次浏览 48人参与
# 米连集团26产品管培生项目 #
6975次浏览 224人参与
# 沪漂/北漂你觉得哪个更苦? #
1035次浏览 29人参与
# 你做过最难的笔试是哪家公司 #
1053次浏览 18人参与
# AI时代,哪个岗位还有“活路” #
2607次浏览 49人参与
# XX请雇我工作 #
51137次浏览 171人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7931次浏览 43人参与
# 简历第一个项目做什么 #
32025次浏览 357人参与
# 简历中的项目经历要怎么写? #
310831次浏览 4256人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152767次浏览 888人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187513次浏览 1123人参与
# AI时代,哪些岗位最容易被淘汰 #
64454次浏览 860人参与
# 如果重来一次你还会读研吗 #
229956次浏览 2011人参与
# 投格力的你,拿到offer了吗? #
178133次浏览 889人参与
# 你怎么看待AI面试 #
180592次浏览 1291人参与
# 正在春招的你,也参与了去年秋招吗? #
364089次浏览 2640人参与
# 腾讯音乐求职进展汇总 #
160802次浏览 1114人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务