本文主要是介绍五分钟学会四种宽数据转长数据方法——Excel、Mysql、R、python,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在学Mysql中的时候,想必大家都曾遇到如下的题:将表1转为表2,
表1
Company | Name | Sale2013 | Sale2014 | Sale2015 | Sale2016 |
---|---|---|---|---|---|
Apple | 苹果 | 5000 | 5050 | 5050 | 5050 |
谷歌 | 3500 | 3800 | 3800 | 3800 | |
脸书 | 2300 | 2900 | 2900 | 2900 |
表2
Company | Name | Year | Sales |
---|---|---|---|
Apple | 苹果 | Sale2013 | 5000 |
谷歌 | Sale2013 | 3500 | |
脸书 | Sale2013 | 2300 | |
Apple | 苹果 | Sale2014 | 5050 |
谷歌 | Sale2014 | 3800 | |
脸书 | Sale2014 | 2900 | |
Apple | 苹果 | Sale2015 | 5050 |
谷歌 | Sale2015 | 3800 | |
脸书 | Sale2015 | 2900 | |
Apple | 苹果 | Sale2016 | 5050 |
谷歌 | Sale2015 | 3800 | |
脸书 | Sale2016 | 2900 |
这实际上就是宽表转长表。今天,分享一下分别在MySQL、excel、R、python中实现宽表转长表的方法。
目录
- 一、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_index、melt(有点类似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)
这篇关于五分钟学会四种宽数据转长数据方法——Excel、Mysql、R、python的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!