padans关于数据处理的杂谈

news/2024/7/19 12:41:51 标签: python, 数据分析, pandas, 爬虫, 网页爬虫

情况:业务数据基本字段会有如下:

python">Index(['时间', '地区', '产品', '字段', '数值'], dtype='object')

在这里插入图片描述

这样就会引发一个经典“三角不可能定理”,如何同时简约展现分时序、分产品、分字段数据。)一般来说,

1、时序为作为单独的分类,

2、然后剩下两个标签就是,要么:

2.1、每个字段一张表,然后列为时序,行为产品

2.2、要么每个产品一张表,列为时序,行为产品。

2.3、要么将“产品”、“字段”组成新的列。

那么实现2.1、2.2,不过这样的瓶颈就是,如果有很多个字段,则会组合成很多张表。

python"># 使用数据透视表,假设现在,逐字段,分产品时序

# 获取所有产品,去重
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

python"># 通过将 产品 字段 组合为一个,形成二维表
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)

输出一张工作表即可。

在这里插入图片描述

有时还需要处理成,具有环比、比年初、同比等值。则采取给源数据增加字段。

先通过类似方法给源数据增加一个比去年同期列

python">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,再执行数据透视表操作

python">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')

最终输出:
在这里插入图片描述


http://www.niftyadmin.cn/n/252808.html

相关文章

前端三个小妙招

整理下本人在工作中撸代码遇到的一些刚看时一脸懵逼,实则很简单就能解决的小妙招,希望对大家有所帮助哟~ 伪元素动态改变其样式 我们都用过伪元素,什么::before,::after啊这些等等,但是他们都不会直接在代码里html中生成标签&am…

【Linux进阶篇】程序与进程

目录 🍁进程静态查看工具-ps 🍂ps aux 🍂ps -l 🍂pstree -p 🍁进程动态查看工具-top 🍁进程的前后台调动 🍂jobs 🍂kill 🍁改变进程优先级 🍁screen 虚拟窗口…

【华为OD机试真题 C++】1079 - 去除多余空格 | 机试题+算法思路+考点+代码解析

文章目录 一、题目🔸题目描述🔸输入输出🔸样例1🔸样例2二、代码参考作者:KJ.JK🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🍂个人博客首页: KJ.JK 💖系列专栏:华为OD机试真题(C++) 一、题目 🔸题目描述 去除文本多余空格,不

机器学习中的三个重要环节:训练、验证、测试

本文重点 模型训练、验证和测试是机器学习中的三个重要环节。这三个环节之间存在着紧密的关系,它们相互作用,共同构建出一个完整的机器学习模型。在本文中,我们将详细介绍模型训练、验证和测试之间的关系。 模型训练、验证和测试之间的关系 模型训练是机器学习中最基本的…

如何快速白嫖一个SSL证书

首先呢,还是要非常感谢各大云厂商能够为白嫖党免费提供申请SSL证书的这个一个平台。 SSL证书作用不在描述,自行百度? 本篇主要从百度云、腾讯云、阿里云讨论下 阿里云 地址:阿里云-计算,为了无法计算的价值 首先需…

运用SQL查询mysql,sersql,oracle所有数据库名和表名

运用SQL查询所有数据库名和表名 MySQLSQLServerOracle MySQL 1、查询所有数据库 show databases;2、查询指定数据库中所有表名 use 数据库名 show tables;或者 select table_name from information_schema.tables where table_schema数据库名 and table_typeBAS…

不同数量的预测框和Ground Truth框计算IoU

import numpy as npdef calculate_iou(boxes1, boxes2):# 转换为 numpy 数组boxes1 np.array(boxes1)boxes2 np.array(boxes2)# 扩展维度,以便广播计算boxes1 np.expand_dims(boxes1, axis1)boxes2 np.expand_dims(boxes2, axis0)# 计算两组框的交集坐标范围x_m…

国内外4款主流ERP系统评测,哪款最好用?

一、ERP系统的概念 ERP系统,是针对通用各个企业特点研发的ERP软件。由于行业产品结构复杂,导致原料种类众多,制造工艺复杂,外加客户、供应商、物流等不确定因素,传统手工、表格、纸质作业模式难以应对复杂状况&#x…