重塑具有多列的 pandas 数据帧

reshape a pandas dataframe with multiple columns(重塑具有多列的 pandas 数据帧)
本文介绍了重塑具有多列的 pandas 数据帧的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在重塑 pandas 数据帧方面有一个问题。如下所示(行数和列数各不相同):

columns       col1        col2       col3       col4
Species                                                
sp1     218.000000  521.000000 533.000000 793.000000
sp1       0.105569    0.252300   0.258111   0.384019
sp1              2           2          2          3
sp2     225.000000  521.000000 540.000000 800.000000
sp2       0.107862    0.249760   0.258869   0.383509
sp2              2           2          2          3
sp3     217.000000  477.000000 512.000000 725.000000
sp3       0.112377    0.247022   0.265148   0.375453
sp3              1           1          3          3

Species是我的索引。我想这样重塑它:

Species columns          c        f p
sp1        col1 218.000000 0.105569 2
sp1        col2 521.000000 0.252300 2
sp1        col3 533.000000 0.258111 2
sp1        col4 793.000000 0.384019 3
sp2
sp2
sp2
sp2
sp3                         etc
sp3
sp3
sp3

但我不知道该怎么办。

其目的是然后制作具有bokeh的p.rect()功能的热图,x轴是列cf,y轴是列Species。矩形的大小将由列p确定。

提前谢谢。

推荐答案

先按楼层划分创建MultiIndex,然后按stackunstack重塑:

c = np.array(['c','f','p'])
df.index = [df.index, c[np.arange(len(df.index)) % 3]]
print (df)
columns          col1        col2        col3        col4
Species                                                  
sp1     c  218.000000  521.000000  533.000000  793.000000
        f    0.105569    0.252300    0.258111    0.384019
        p    2.000000    2.000000    2.000000    3.000000
sp2     c  225.000000  521.000000  540.000000  800.000000
        f    0.107862    0.249760    0.258869    0.383509
        p    2.000000    2.000000    2.000000    3.000000
sp3     c  217.000000  477.000000  512.000000  725.000000
        f    0.112377    0.247022    0.265148    0.375453
        p    1.000000    1.000000    3.000000    3.000000

df = df.stack().unstack(1).reset_index()
print (df)
   Species columns      c         f    p
0      sp1    col1  218.0  0.105569  2.0
1      sp1    col2  521.0  0.252300  2.0
2      sp1    col3  533.0  0.258111  2.0
3      sp1    col4  793.0  0.384019  3.0
4      sp2    col1  225.0  0.107862  2.0
5      sp2    col2  521.0  0.249760  2.0
6      sp2    col3  540.0  0.258869  2.0
7      sp2    col4  800.0  0.383509  3.0
8      sp3    col1  217.0  0.112377  1.0
9      sp3    col2  477.0  0.247022  1.0
10     sp3    col3  512.0  0.265148  3.0
11     sp3    col4  725.0  0.375453  3.0

这篇关于重塑具有多列的 pandas 数据帧的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)