【Python私活案例】100元:Pandas实现Excel表格转换

共 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读取原始数据
1读取原始数据
2将等级转换为list格式
2等级转换为list
3添加新的日期列,为一个连续的日期区间

这个步骤感谢一下群友“物品0791”的优化,使代码更加简洁了。

4一行拆分成多行

这个步骤是最关键的环节,将表格变为长表后,后续进行透视就是非常简单的步骤了。

5使用pivot_table进行表透视得到结果
5透视得到结果表

最后展示一下和甲方的交付(钱不在多,贵在获得肯定)

钱钱到手,可以去浪了^_^~~~

最后,推荐蚂蚁老师的《Python实现Excel办公自动化》课程

购买课程后可以加蚂蚁老师微信ant_learn_python入群,群快满500人了!!


附注:100元 = 私活需求50元+投稿给蚂蚁老师稿费50元


阅读原文,也可以达到课程页面

浏览 57
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报