大家好。最近看到一群朋友在讨论一个宽表变长表的问题。其实这种需求在我们日常的数据中也很常见。加工。结合群友们的智慧,今天就来看看excel和python是如何实现这个需求的吧!内容:Excel反向透视技巧Pandas反向透视技巧一、Excel反向透视技巧Excel需要使用PowerQuery进行反向透视操作。第一步:选择数据,然后点击菜单栏-数据-来自表/区域选择数据-来自表。第二步:创建表格时,根据实际情况选择是否包含标题(本例不包含)创建表格。第三步1:点击上面的确认按钮后,会出现PowerQuery编辑器PowerQuery编辑器第四步:根据控件,选择所有需要操作的列(或者shift连续选择列),然后去toconversion-clickthereversepivotcolumnreversepivotcolumn第五步:就可以看到我们需要的结果了。逆向透视的结果。第六步:点击左上角的文件,选择关闭,上传上传的数据。第七步:我们发现在原来的表格中出现了表1的标签,而且是我们预期的反向透视结果,大功告成!(删除不相关的列属性即可)最终结果数据2.Pandas逆向透视技术我们要做的是透视的逆向操作,即反向透视。自然地,pandas也提供了非常方便的函数方法,让我们一起来看看吧。隆重推荐熔体函数方法: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:将DataFrame从宽格式转为长格式,可选择保留标识符set.id_vars:元组、列表或ndarray(可选),用作标识符变量的列value_vars:元组、列表或ndarray,可选,以转置列。如果未指定,则所有未设置为id_varsvar_name:scalar的列都将用作“变量”列的名称。如果没有,则使用frame.columns.name或“变量”value_name:标量,默认“值”,“值”列的名称col_level:int或str,可选,如果列是MultiIndex,则使用这个我不会举例如果关卡熔化了,就用案例数据入手吧!importpandasaspd#读取数据df=pd.read_excel(r'0927testdata.xlsx',header=None)df数据预览#直接反透视(df.melt(id_vars=df.columns[:2],#标识变量的列value_vars=df.columns[2:],#注释掉同样的结果ignore_index=True,#忽略索引).sort_values(by=[0,1])#sort.dropna()#删除空值OK)结果是不是很方便?可以直接用一个函数来完成。感谢小组成员1px的想法。这种解法,笔者之前和朋友打过交道,但是看到这道题的时候,居然用了另一种更复杂的解法,真是搞笑。我们也来看看这个比较麻烦的解决方案:核心是explodecolumndata=df.iloc[:,:2].copy()数据初始化data#auxiliarycolumn用于存储存储信息列表data['auxiliarycolumn']=list(df.loc[:,2:].values)dataauxiliarycolumnstoreinformationlist#爆列补全要求data.explode(column='auxiliarycolumn').dropna()爆列补全要求以上是本次的全部内容围绕宽表转长表的操作展开,也就是反向透视。其实excel和pandas都提供了非常简单直接的处理方式。熟悉操作后,自然能高效解决问题。不过,我们也可以通过其他的思路来锻炼我们的逻辑思维能力,或许可以加强我们处理复杂问题的能力!
