【Python私活案例】100元:Pandas实现Excel表格转换
蚂蚁学Python
共 1836字,需浏览 4分钟
·
2021-11-17 00:22
一早起床发现Python的学习群里居然还有一个悬赏需求没人接单,还等什么赶紧接单赚顿星爸爸早餐。
需求分析
根据需求,最终需要转换的表格结果是一个按日期、分等级的次数统计结果,如果把左侧的原始表格转换为按日期、按等级记录的流水表格,那只要一次透视就可以得到最终结果。因此,思路最终就是将原始表格转为长表格式,后进行透视处理。(嗯,在星爸爸的早餐召唤下,我的思路就是这么清晰!)
二话不说撸代码
import pandas as pd
# 读取原始数据表格
df = pd.read_excel('d:/test/需求.xlsx')
# 根据等级规则,构建一个字典用于后续转换
level_dict = {
1: ['等级1'],
2: ['等级1', '等级2'],
3: ['等级1', '等级3'],
4: ['等级1', '等级2', '等级4'],
5: ['等级1', '等级2', '等级5']
}
# 将等级转换list格式
df['等级'] = df['等级'].map(lambda x: level_dict.get(x))
# 新增日期列,将开始时间至结束时间转换为连续的日期
df['日期'] = df.apply(
lambda x: pd.date_range(x['开始时间'], x['结束时间']),
axis=1
)
# 将df的等级、日期列拆分为多行格式
df = df.explode('等级').explode('日期')
# 进行透视得到结果
df = df.pivot_table(
index='日期', # 日期作为索引
columns='等级', # 等级作为列
values='开始时间', # 开始时间作为计数列(随意选择非空列即可)
aggfunc='count', # 聚合函数为count计数
fill_value=0 # 空值使用0填充
)
空腹状态下,脑部供血充足,手速极快,三分钟搞定代码~~~
过程校验与展示:
1读取原始数据
2将等级转换为list格式
3添加新的日期列,为一个连续的日期区间
这个步骤感谢一下群友“物品0791”的优化,使代码更加简洁了。
4一行拆分成多行
这个步骤是最关键的环节,将表格变为长表后,后续进行透视就是非常简单的步骤了。
5使用pivot_table进行表透视得到结果
最后展示一下和甲方的交付(钱不在多,贵在获得肯定)
钱钱到手,可以去浪了^_^~~~
最后,推荐蚂蚁老师的《Python实现Excel办公自动化》课程
购买课程后可以加蚂蚁老师微信ant_learn_python入群,群快满500人了!!
附注:100元 = 私活需求50元+投稿给蚂蚁老师稿费50元
阅读原文,也可以达到课程页面
评论