重塑具有多列的 pandas 数据帧

本教程将介绍重塑具有多列的 pandas 数据帧的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

重塑具有多列的 pandas 数据帧 教程 第1张

问题描述

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

columns col1  col2 col3 col4
Species
sp1  218.000000  521.000000 533.000000 793.000000
sp1 0.105569 0.2523000.2581110.384019
sp1  2  2 2 3
sp2  225.000000  521.000000 540.000000 800.000000
sp2 0.107862 0.2497600.2588690.383509
sp2  2  2 2 3
sp3  217.000000  477.000000 512.000000 725.000000
sp3 0.112377 0.2470220.2651480.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
Speciessp1  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 columnscf p
0sp1 col1  218.0  0.105569  2.0
1sp1 col2  521.0  0.252300  2.0
2sp1 col3  533.0  0.258111  2.0
3sp1 col4  793.0  0.384019  3.0
4sp2 col1  225.0  0.107862  2.0
5sp2 col2  521.0  0.249760  2.0
6sp2 col3  540.0  0.258869  2.0
7sp2 col4  800.0  0.383509  3.0
8sp3 col1  217.0  0.112377  1.0
9sp3 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 数据帧的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。