python - 使用行和列多重索引和给定顺序从表格转换为矩阵

标签 python pandas

给定以下包含表格格式矩阵的数据框:

values = list(range(5))
var1 = ['01', '02', '03', '0', '0']
var2 = ['a', 'b', 'c', 'd', 'e']
var3 = ['01', '02', '03', '0', '0']
var4 = ['a', 'b', 'c', 'd', 'e']
var5 = ['S1', 'S1','S1', 'S3', 'S2']
var6 = ['P1', 'P1','P1', 'P3', 'P2']

df = pd.DataFrame({'var1': var1,
                   'var2': var2,
                   'var3': var3,
                   'var4': var4,
                   'var5': var5,
                   'var6': var6,
                   'value': values})

以下对 var5 和 var6 施加的顺序:

var5_order = ['S1', 'S2', 'S3', 'S4']
var6_order = ['P1', 'P2', 'P3', 'P4']

如何以 var6、var1 和 var2(按此顺序)定义行多重索引以及 var5、var3 和 var4(按此顺序)定义列多重索引的方式对数据帧进行透视?另外,如何在透视数据框中施加 var5_order 和 var6_order ?

最佳答案

是的,您可以使用 ordered=True 执行 pd.Categorical:

df['var5'] = pd.Categorical(df['var5'], categories=var5_order, ordered=True)
df['var6'] = pd.Categorical(df['var6'], categories=var6_order, ordered=True)

df.pivot_table(index=['var6','var1','var2'], 
               columns=['var5','var3','var4'], 
               values='value')

输出:

var5             S1             S2   S3
var3             01   02   03    0    0
var4              a    b    c    e    d
var6 var1 var2                         
P1   01   a     0.0  NaN  NaN  NaN  NaN
     02   b     NaN  1.0  NaN  NaN  NaN
     03   c     NaN  NaN  2.0  NaN  NaN
P2   0    e     NaN  NaN  NaN  4.0  NaN
P3   0    d     NaN  NaN  NaN  NaN  3.0

关于python - 使用行和列多重索引和给定顺序从表格转换为矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72996661/

相关文章:

python - os.walk 是否利用操作系统返回的文件类型来提高效率?

python - sqlalchemy create_engine() 如果数据库已经存在

python - 使用 Pandas 在日期的两个时间之间进行插值

python - 将数据框传递给 pandas 中的 SQL 时,如何检查记录是否存在?

python - Windows 上 Python (v3.0) 中的环境变量

python - Pandas :如何按一列的日期对数据框行进行排序

python - 图像在 Django 模板中旋转

python - Sumproduct 等效的 python 代码运行时间太长

python - 将缺失的月份添加到具有空值的数据框中

python - pandas 在 lambda 操作后更新数据框