padans 关于数据处理的杂谈 -- 时序数
时间:2022-07-26
本文章向大家介绍padans 关于数据处理的杂谈 -- 时序数,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
情况:业务数据基本字段会有如下:
Index(['时间', '地区', '产品', '字段', '数值'], dtype='object')
这样就会引发一个经典“三角不可能定理”,如何同时简约展现分时序、分产品、分字段数据。)一般来说,
1、时序为作为单独的分类,
2、然后剩下两个标签就是,要么:
2.1、每个字段一张表,然后列为时序,行为产品
2.2、要么每个产品一张表,列为时序,行为产品。
2.3、要么将“产品”、“字段”组成新的列。
那么实现2.1、2.2,不过这样的瓶颈就是,如果有很多个字段,则会组合成很多张表。
# 使用数据透视表,假设现在,逐字段,分产品时序
# 获取所有产品,去重
cp = df['产品'].to_frame().drop_duplicates(subset=['产品'])
# 得到 3个 工作表,每个工作表为相关字段的分产品分时序,这样一来,如果涉及很多个字段,则会有很多个表
with pd.ExcelWriter('data/test2-shuchu.xls') as writer:
for zd in df['字段'].unique():
table = pd.pivot_table(df[df['字段'] == zd], values='数值', index=['产品'],columns=['时间'], aggfunc=np.sum)
table = pd.merge(cp,table,how='left',on='产品')
table.to_excel(writer,index=False,sheet_name = zd)
实现2.3
# 通过将 产品 字段 组合为一个,形成二维表
with pd.ExcelWriter('data/test2-shuchu2.xls') as writer:
table = pd.pivot_table(df, values='数值', index=['产品','字段'],columns=['时间'], aggfunc=np.sum)
table.reset_index().to_excel(writer,index=False,sheet_name = zd)
输出一张工作表即可。
有时还需要处理成,具有环比、比年初、同比等值。则采取给源数据增加字段。
先通过类似方法给源数据增加一个比去年同期列
def add_year_on_year(x):
d = ''
if x['时间'] == '20161231':
return None
elif x['时间'] == '20171231':
d = '20161231'
elif x['时间'] == '20181231':
d = '20171231'
# 获取相应的数值
v = df[(df['时间'] == d) & (df['地区'] == x['地区']) & (df['产品'] == x['产品']) & (df['字段'] == x['字段'])]
#print('d:',d)
if len(v) == 0:
return x['数值']
else:
return x['数值'] - v.iloc[0]['数值']
df['同比增减'] = df.apply(add_year_on_year,axis=1)
with pd.ExcelWriter('data/test2-huanyuan-add.xls') as writer:
df.to_excel(writer,index=False,sheet_name = 'Sheet1')
输出如下:
最后在再把数据打回stack,再执行数据透视表操作
df2 = df.set_index(['时间', '地区', '产品','字段'])
df2 = df2.stack()
df2 = df2.reset_index()
with pd.ExcelWriter('data/test2-huanyuan2.xls') as writer:
df2.to_excel(writer,index=False,sheet_name = 'Sheet1')
df2.rename(columns={'level_4':'数值属性',0:'数值'},inplace=True)
# 通过将 产品 字段 组合为一个,形成二维表
with pd.ExcelWriter('data/test2-shuchu3.xls') as writer:
table = pd.pivot_table(df2, values='数值', index=['产品','字段','数值属性'],columns=['时间'], aggfunc=np.sum)
table.reset_index().to_excel(writer,index=False,sheet_name = 'h')
最终输出:
- Gopher面试中的Coding
- golang 标准库间依赖的可视化展示
- 静态变量和实例变量的区别(配图解释专业术语,通俗易懂)
- 论golang是世界上最好的语言
- 用shape画内圆外方,形成一个圆形头像
- 在Go中对gRPC+ProtoBuf与Http+Json进行基准测试
- Achartengine.jar绘制动态图形一 --饼图
- 工具| 关于Python线程和队列使用的小思考
- Java中list<Object[]>、list<Student>、list<Map<String,String>>排序
- Java-单例模式详解(图文并茂,简单易懂)
- Fragment生命周期及实现点击导航图片切换fragment,Demo
- 《GO IN ACTION》读后记录:GO的并发与并行
- SharedPreferences 存List集合,模拟数据库,随时存取
- Servlet与Jsp的结合使用实现信息管理系统一
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 内网渗透 | 基于IPC的横向移动
- 【DB笔试面试866】队列等待之enq: TX - allocate ITL entry
- 【Vue.js】Vue.js组件库Element中的上传、评分、穿梭框和表单
- 【Vue.js】Vue.js项目构建
- 【Vue.js】Vue.js组件库Element中的表格、标签和进度条
- 用个小技巧,趁你不备,rm -rf你的电脑
- 什么是Python 中的EAFP 哲学
- 设计模式--工厂模式
- 设计模式--命令模式
- 安装FastDFS+Nginx
- Redis 中的 5 大数据类型及其常用命令手册
- 设计模式--适配器模式
- 设计模式--外观模式
- 设计模式--模板模式
- springBoot快速入门