我很尴尬地在这篇文章中提出这个问题,因为我确信它是完全初级的。然而,我花了最后两个小时仔细研究pandas
文档,并在阳光下尝试了一切,但无济于事......
例如,考虑一个像这样的数据框:
A B C D x y z
0 a0 b0 c0 d0 0.007 0.710 0.990
1 a0 b0 c0 d1 0.283 0.040 1.027
2 a0 b0 c1 d0 0.017 0.688 2.840
3 a0 b0 c1 d1 0.167 0.132 2.471
4 a0 b1 c0 d0 0.041 0.851 1.078
5 a0 b1 c0 d1 0.235 1.027 1.027
6 a0 b1 c1 d0 0.037 0.934 2.282
7 a0 b1 c1 d1 0.023 1.049 2.826
8 a1 b0 c0 d0 0.912 0.425 1.055
9 a1 b0 c0 d1 0.329 0.932 0.836
10 a1 b0 c1 d0 0.481 0.681 0.997
11 a1 b0 c1 d1 0.782 0.595 2.294
12 a1 b1 c0 d0 0.264 0.918 0.857
13 a1 b1 c0 d1 0.053 1.001 0.920
14 a1 b1 c1 d0 1.161 1.090 1.470
15 a1 b1 c1 d1 0.130 0.992 2.121
请注意,列A
、B
、C
和的不同值的每个组合D
在此数据框中仅出现一次。因此,可以将此列子集视为“键列”,将其余列视为“值列” 1。
我想通过“unstacking”列从这个框架中生成一个新框架C
。我的意思是,对于剩余“关键列”( 、 和 )的每个不同的值组合,列A
的B
值D
会C
在新框架中产生相应的“值列”。
例如,如果我们暂时忽略列x
,y
我上面提到的拆栈操作将产生数据框:
A B D c0 c1
0 a0 b0 d0 0.990 2.840
1 a0 b0 d1 1.027 2.471
2 a0 b1 d0 1.078 2.282
3 a0 b1 d1 1.027 2.826
4 a1 b0 d0 1.055 0.997
5 a1 b0 d1 0.836 2.294
6 a1 b1 d0 0.857 1.470
7 a1 b1 d1 0.920 2.121
这里新列的值c0
和c1
是从列的值(在原始数据框中)获得的,对于列、和z
的值的相应唯一组合。A
B
D
我怎样才能做到这一点?
如果能够在新框架中使用某种形式的分层列组织(即现在的列x
、并且每个将依次由“子列”和) 组成,或者可能是一些使用复合名称命名新列的方案(例如,在新框架中,列、和将被列、、、、和、等),但这可能希望太多......y
z
x
y
z
c0
c1
x
y
z
x_c0
x_c1
y_c0
y_c1
z_c0
z_c1
PS:这是上面数据帧的数据,采用 TSV 格式:
A B C D x y z
a0 b0 c0 d0 0.007 0.71 0.99
a0 b0 c0 d1 0.283 0.04 1.027
a0 b0 c1 d0 0.017 0.688 2.84
a0 b0 c1 d1 0.167 0.132 2.471
a0 b1 c0 d0 0.041 0.851 1.078
a0 b1 c0 d1 0.235 1.027 1.027
a0 b1 c1 d0 0.037 0.934 2.282
a0 b1 c1 d1 0.023 1.049 2.826
a1 b0 c0 d0 0.912 0.425 1.055
a1 b0 c0 d1 0.329 0.932 0.836
a1 b0 c1 d0 0.481 0.681 0.997
a1 b0 c1 d1 0.782 0.595 2.294
a1 b1 c0 d0 0.264 0.918 0.857
a1 b1 c0 d1 0.053 1.001 0.92
a1 b1 c1 d0 1.161 1.09 1.47
a1 b1 c1 d1 0.13 0.992 2.121
1更明确地说,数据帧与 a同构dict
,其键是 4-tuples ('a0', 'b0', 'c0', 'd0'), ('a0', 'b0', 'c0', 'd1'), ..., ('a1', 'b1', 'c1', 'd1')
,其值是 3-tuples (0.007, 0.710, 0.990), (0.283, 0.040, 1.027), ..., (0.130, 0.992, 2.121)
。我尝试的许多事情之一是找到一种通过“键列”的唯一组合来索引数据帧的方法。同样的故事:这应该是“hello-world”级别的东西pandas
,但我无法在文档中找到如何做到这一点。显然,我的大脑和编写pandas
文档的人的大脑彼此完全正交......