大家好
最近看到群友们在讨论一个宽表变长表的问题,其实这类需求也很常见于我们日常的数据处理中。综合群友们的智慧,今天我们就来看看excel
与python
如何实现这个需求吧!
文章图片
目录:
- excel逆透视技巧
- Pandas逆透视技巧
第一步:选中数据,然后在
菜单栏
-数据
-点击来自表格/区域
文章图片
选中数据-来自表格
第二步:创建表的时候,根据实际情况选中是否包含标题(本例不包含)
文章图片
创建表
第三步:点击上述
确认
按钮后会出现Power Query
编辑器文章图片
Power Query编辑器
第四步:按照
control
,选中全部需要操作的列(或者shift连续取列),再到转换
-点击逆透视列
文章图片
逆透视列
第五步:可以看到出现了我们需要的结果
文章图片
逆透视结果
第六步:点击左上角
文件
,选中关闭并上载
文章图片
上载数据
第七步:我们发现,在原始表出现了
表1
的页签,里面正是我们期望的逆透视结果,搞定!(删掉无关列属性即可)文章图片
最终结果数据
2. Pandas逆透视技巧 我们要做的是透视的逆向操作,也就是逆透视,
pandas
自然也提供了非常方便的函数方法,让我们来一起看看吧。隆重推荐
melt
函数方法:df.melt(
id_vars=None,
value_vars=None,
var_name=None,
value_name='value',
col_level: 'Level | None' = None,
ignore_index: 'bool' = True,
) -> 'DataFrame'
Docstring:
Unpivot a DataFrame from wide to long format, optionally leaving identifiers set.
就不举例了,直接拿案例数据开搞!id_vars
:tuple,list或ndarray(可选),用作标识变量的列
value_vars
:tuple,列表或ndarray,可选,要取消透视的列。如果未指定,则使用未设置为id_vars的所有列
var_name
:scalar,用于“变量”列的名称。如果为None,则使用frame.columns.name或“variable”
value_name
:scalar,默认为“ value”,用于“ value”列的名称
col_level
:int或str,可选,如果列是MultiIndex,则使用此级别来融化
import pandas as pd
# 读取数据
df = pd.read_excel(r'0927测试数据.xlsx', header=None)
df
文章图片
数据预览
# 直接逆透视
(
df.melt(id_vars=df.columns[:2], # 标识变量的列
value_vars=df.columns[2:], # 注释掉结果一样
ignore_index=True, # 忽略索引
)
.sort_values(by=[0,1]) # 排序
.dropna() # 删除含空值的行
)
【对比excel,用python实现逆透视操作(宽表变长表)】
文章图片
结果
是不是很方便,直接一个函数即可搞定,感谢 群成员 1px 提供的思路。
这种解决方案,笔者在之前给朋友处理过,不过看到这题的时候我居然用的是另外一种更复杂的解决方法,简直秀逗了。
我们也看看这种更麻烦的解决方案吧:
核心是explode爆炸列
data = https://www.it610.com/article/df.iloc[:,:2].copy()
data
文章图片
初始化data
# 辅助列用于存储店信息列表
data['辅助列'] = list(df.loc[:,2:].values)
data
文章图片
辅助列存储店信息列表
# 爆炸列完成需求
data.explode(column='辅助列').dropna()
文章图片
爆炸列完成需求
以上就是本次的全部内容,围绕着关于宽表转长表,也就是逆透视的操作。其实
excel
和pandas
都提供了很简单直接的处理方法,大家熟悉操作后自然就能轻车熟路,高效解决问题啦。不过,我们也可以通过其他一些思路来锻炼自己的逻辑思维能力,也许能更强化自己对复杂问题的应对水平哦!
推荐阅读
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Python专栏|数据分析的常规流程
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- Python绘制小红花
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- python|8. 文件系统——文件的删除、移动、复制过程以及链接文件
- 爬虫|若想拿下爬虫大单,怎能不会逆向爬虫,价值过万的逆向爬虫教程限时分享
- 分布式|《Python3网络爬虫开发实战(第二版)》内容介绍
- java|微软认真聆听了开源 .NET 开发社区的炮轰( 通过CLI 支持 Hot Reload 功能)