是否需要使用pivot实现多列转单列?将每个单元格转为独立行
无需使用pivot实现多列转单列
你要实现的是将多列数据全部转为单列,不需要使用pivot——pivot主要用于基于行列索引重新组织带分类维度的数据,并不适配这种简单的多列转单列场景。以下是几种更直接的实现方法:
方法1:使用pd.melt
melt是pandas专为宽表转长表设计的工具,适合这类将所有列合并为单列的需求:
import pandas as pd d = {'col1':[1,9,17],'col2':[2,10,18],'col3':[3,11,19],'col4':[4,12,20],'col5':[5,13,21],'col6':[6,14,22],'col7':[7,15,23],'col8':[8,16,24]} df = pd.DataFrame(data=d) # 转换为单列并重置索引 result = pd.melt(df, value_name='value')['value'].reset_index(drop=True) print(result)
方法2:使用stack
stack会将列索引转换为行索引,之后直接提取数值并重置索引即可:
result = df.stack().reset_index(drop=True) print(result)
方法3:使用numpy的ravel
直接展平DataFrame的数值数组,再转为DataFrame,通过参数控制展平顺序:
import pandas as pd import numpy as np d = {'col1':[1,9,17],'col2':[2,10,18],'col3':[3,11,19],'col4':[4,12,20],'col5':[5,13,21],'col6':[6,14,22],'col7':[7,15,23],'col8':[8,16,24]} df = pd.DataFrame(data=d) # 'F'表示按列优先展平,和你期望的顺序一致 result = pd.DataFrame(df.values.ravel('F'), columns=['value']) print(result)
以上三种方法都能得到你期望的单列结果,输出示例片段:
0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 ...
内容的提问来源于stack exchange,提问作者OldManSeph
相关产品推荐
相关产品推荐

