2017-08-12 13 views
2

私は、次のデータフレームがあります。パンダ:共通の変数に作成された新しい列を持つデータフレーム内のマージの列

ID,SomeValue,FooA1,FooA2,FooA3,FooB1,FooB2,FooB3,BarA1,BarA2,BarA3,BarB1,BarB2,BarB3 
1 ,val1  ,4 ,7 ,2 ,8 ,1 ,3 ,2 ,9 ,2 ,0 ,9 ,2 
2 ,val2  ,2 ,3 ,8 ,  ,  ,  ,1 ,5 ,3 ,  ,  , 
. 
. 

をそして、私は列をマージしたい「[フー|バー] [A | B ] \ D +」は、次なるように、複数の列の異なる組み合わせがマージされ、適切な新しいカラムがこれらの変化を表す変数を保存するために作成されている。すなわち:空の値があり得ること

ID,SomeValue,FooBar ,AB ,Num ,Val 
1 ,val1  ,Foo  ,A  ,1  ,4 
1 ,val1  ,Foo  ,A  ,2  ,7 
1 ,val1  ,Foo  ,A  ,3  ,2 
1 ,val1  ,Foo  ,B  ,1  ,8 
1 ,val1  ,Foo  ,B  ,2  ,1 
1 ,val1  ,Foo  ,B  ,3  ,3 
1 ,val1  ,Bar  ,A  ,1  ,2 
1 ,val1  ,Bar  ,A  ,2  ,9 
1 ,val1  ,Bar  ,A  ,3  ,2 
1 ,val1  ,Bar  ,B  ,1  ,0 
1 ,val1  ,Bar  ,B  ,2  ,9 
1 ,val1  ,Bar  ,B  ,3  ,2 
2 ,val2  ,Foo  ,A  ,1  ,2 
2 ,val2  ,Foo  ,A  ,2  ,3 
2 ,val2  ,Foo  ,A  ,3  ,8 
2 ,val2  ,Bar  ,A  ,1  ,1 
2 ,val2  ,Bar  ,A  ,2  ,5 
2 ,val2  ,Bar  ,A  ,3  ,3 

注意、上記の行2のように、それらはtに含まれてはならない彼は最終的に設定した。

これはかなり単純でなければなりませんが、私はパンダには新しく、正しいコマンドを見つけるのに苦労しています。

ご協力いただきありがとうございます。

答えて

4

あなたは使用することができます:リシェイプ用unstack

を注文するために
df = df.set_index(['ID','SomeValue']).stack().reset_index(name='Val') 
df[['FooBar','AB','Num']] = df.pop('level_2').str.extract('(Foo|Bar)(A|B)(\d+)', expand=True) 
cols = ['ID', 'SomeValue', 'FooBar', 'AB', 'Num','Val'] 
df = df.reindex_axis(cols, axis=1) 
print (df) 
    ID SomeValue FooBar AB Num Val 
0 1  val1 Foo A 1 4.0 
1 1  val1 Foo A 2 7.0 
2 1  val1 Foo A 3 2.0 
3 1  val1 Foo B 1 8.0 
4 1  val1 Foo B 2 1.0 
5 1  val1 Foo B 3 3.0 
6 1  val1 Bar A 1 2.0 
7 1  val1 Bar A 2 9.0 
8 1  val1 Bar A 3 2.0 
9 1  val1 Bar B 1 0.0 
10 1  val1 Bar B 2 9.0 
11 1  val1 Bar B 3 2.0 
12 2  val2 Foo A 1 2.0 
13 2  val2 Foo A 2 3.0 
14 2  val2 Foo A 3 8.0 
15 2  val2 Foo B 1 1.0 
16 2  val2 Foo B 2 5.0 
17 2  val2 Foo B 3 3.0 
+0

すごくお返事ありがとうございます。結局は(少なくとも私にとっては)それほど簡単ではありませんでした。 私のデータセットであなたのソリューションを試しましたが、構造は良いですが、私はすべての私の値のNaNを取得します。 reset_index(name = 'b')の 'b'とは何ですか? – Tamori

+0

Opps、typo、それは 'Val'です。 – jezrael

+0

'NaN's - すべての値はNaNですか? 'set_index()'の前に元のdatadarmeの 'print(df.info())'とは何ですか? – jezrael

関連する問題