五分钟学会四种宽数据转长数据方法——Excel、Mysql、R、python

在学Mysql中的时候,想必大家都曾遇到如下的题:将表1转为表2,
表1

CompanyNameSale2013Sale2014Sale2015Sale2016
Apple苹果5000505050505050
Google谷歌3500380038003800
Facebook脸书2300290029002900

表2

CompanyNameYearSales
Apple苹果Sale20135000
Google谷歌Sale20133500
Facebook脸书Sale20132300
Apple苹果Sale20145050
Google谷歌Sale20143800
Facebook脸书Sale20142900
Apple苹果Sale20155050
Google谷歌Sale20153800
Facebook脸书Sale20152900
Apple苹果Sale20165050
Google谷歌Sale20153800
Facebook脸书Sale20162900

这实际上就是宽表转长表。今天,分享一下分别在MySQL、excel、R、python中实现宽表转长表的方法。

一、Mysql

实现的关键字:union all

#准备数据
create table items(Company varchar(10),
				   Name varchar(10),Sale2013 int,
				   Sale2014 int,Sale2015 int, Sale2016 int);

insert into items values("Apple","苹果",5000,5050,5050,5050),
    					("Google","谷歌",3500,3800,3800,3800),
						("Facebook","脸书",2300,2900,2900,2900);
select Company,Name,
'Sale2013' as 'Year',`Sale2013` as 'Sales' from items union all
select Company,Name,
'Sale2014' as 'Year',`Sale2014` as 'Sales' from items union all
select Company,Name,
'Sale2015' as 'Year',`Sale2015` as 'Sales' from items union all
select Company,Name,
'Sale2016' as 'Year',`Sale2016` as 'Sales' from items;

在这里插入图片描述

二、Excel

实现关键词:PowerQuery逆透视

(1)数据——从表格——表包含标题
在这里插入图片描述
(2)选中Company,Name列——转换——逆透视其他列
在这里插入图片描述
(3)修改列名——关闭并上载至

在这里插入图片描述

三、R

实现关键词:gather

#准备数据
df=data.frame(Company=c("Apple","Google","Facebook"),
			  Name=c("苹果","谷歌","脸书"),
			  Sale2013=c(5000,3500,2300),
			  Sale2014=c(5050,3800,2900),
			  Sale2015=c(5050,3800,2900),
			  Sale2016=c(5050,3800,2900))
library(tidyr)
gather(df,key="Year",value="Sales",Sale2013:Sale2016)

key:转换后新的列名
value:转换后值的新列名
Sale2013:Sale2016 : 需要转列的字段

在这里插入图片描述

四、python

实现关键词:set_index+stack+reset_indexmelt(有点类似R中的gather)

方法一:set_index+stack+reset_index

stack可以将行索引转为列索引,但Company、Name这列是没有变化的,所以需要先将其设置为索引,具体实现方法如下:

import pandas as pd
import os
os.chdir('C:/Users/dell/Desktop')
data=pd.read_excel('data.xlsx',encoding='utf-8')
df=data.set_index(['Company','Name']).stack().reset_index()
df.columns=['Company','Name','Year','Sales']

在这里插入图片描述

方法二:melt

data.melt(id_vars=['Company','Name'],var_name='Year',value_name='Sales')

在这里插入图片描述
id_vars:保持不变的列索引
var_name:行索引转列索引后新的列名 (类似R中的KEY)
value_name:value_name:新索引对应的值的列名 (类似R中的VALUE)

  • 9
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值