この投稿で質問するのは非常に恥ずかしいです。なぜなら、それは完全に初歩的だからです。それでも、私は過去 2 時間、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 回だけ発生することに注意してください。したがって、この列のサブセットを「キー列」と見なし、残りの列を「値列」と見なすことができます1。
column を「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
元のフレーム (つまり、すべての値 column 、y
、および) で同様のアンスタック操作を実行できると便利ですz
。新しいフレームで何らかの形式の階層的な列編成を使用します (つまり、現在の列x
、y
、そして、それぞれz
が順番に「サブカラム」とで構成される)、または複合名を使用して新しい列に名前を付けるためのスキーム (たとえば、新しいフレームで column 、、およびが列 column 、、、、、およびに置き換えられる可能性があります)。など)、しかし、これは期待しすぎかもしれません...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より明示的には、データフレームは、キーが 4- tuplesで、値が 3- tuples であるaに同形です。私が試みた多くのことの 1 つは、「キー列」の一意の組み合わせによってデータフレームにインデックスを付ける方法を見つけることでした。同じ話: これは の「hello-world」レベルのものである必要がありますが、ドキュメントでそれを行う方法を見つけることができませんでした。明らかに、私の脳とドキュメントを書いた人の脳は互いに完全に直交しています...dict
('a0', 'b0', 'c0', 'd0'), ('a0', 'b0', 'c0', 'd1'), ..., ('a1', 'b1', 'c1', 'd1')
(0.007, 0.710, 0.990), (0.283, 0.040, 1.027), ..., (0.130, 0.992, 2.121)
pandas
pandas