专栏首页源懒由码padans 关于数据处理的杂谈 -- 时序数

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

最终输出:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • pandas系列 - (二)关于两期时点数据的比较

    统计数据来说,有时点数据和时期数据。通常情况下,会进行两期数据的比较,现整理一个两期数据比较的场景应用。主要流程分为:

    forxtz
  • pandas 一维台账数据与二维表格数据的转换

    需求:低版本excel对于使用透视表后,索引方向会出现合并,需要将其恢复为“台账”样式。

    forxtz
  • pandas系列 - (三)关于时点时期数据的处理

    实际工作场景中,会遇到需要处理时序表。对于少量的时点时序数据,明细数据+数据透视表,也是很快能处理完成。大量的话,可能会出现有一点慢,同时一些计算字段的每次都要...

    forxtz
  • 深度 | 比深度学习快几个数量级,详解Facebook最新开源工具——fastText

    导读:Facebook声称fastText比其他学习方法要快得多,能够训练模型“在使用标准多核CPU的情况下10分钟内处理超过10亿个词汇”,特别是与深度模型对...

    AI科技评论
  • hadoop3 问题大杂烩

    https://blog.csdn.net/King_818/article/details/64998693 修改那个文件夹的权限

    平凡的学生族
  • 游戏开发中的专业术语

    本文整理了网络/游戏/编程相关的专业术语,作为游戏开发中的辅助参考资料,后期如果遇到其他的术语还会更新。

    Zoctopus
  • Hadoop、Hbase、Hive版本兼容性

    当我们想整合hadoop,hbase,hive,zookeeper的时候,如果刚入门,可能认为这是比较简单的问题。但是当你自己真正想整合的时候,却会遇到很多的问...

    Albert陈凯
  • 在Linux最大打开文件数限制下 MySQL 对参数的调整

    非root用户运行MySQL,当MySQL配置比较高时,MySQL运行中生效的参数值与配置的值不一样。 这篇文章的目的是为了说明在系统资源不够的情况下,MySQ...

    二狗不要跑
  • Hadoop完全分布式集群搭建

    集群中只有mapred-site.xml.template,可以从这个文件进行复制

    CoderJed
  • 一脸懵逼学习Hadoop分布式集群HA模式部署(七台机器跑集群)

    1)集群规划: 主机名          IP      安装的软件                      运行的进程 master    192.168...

    别先生

扫码关注云+社区

领取腾讯云代金券