2017-01-04 16 views
0

これはmy previous questionの続きです。列に複数の列のグループを渡す方法は?

Iデータセットを有する:

df = 
ID GROUP_1 GROUP_2 GROUP_3 COUNT NAME_1 NAME_2 
1 AAA  AAA  CCC  5  xxx  yyy 
2 BBB  CCC  AAA  6  yyy  zzz 

結果はこの1つでなければならない。私は行にGROUP_1、GROUP_2とGROUP_3の値を渡したい

new = 
ID GROUP COUNT NAME 
1 AAA 5  xxx 
1 AAA 5  yyy 
1 CCC 5  xxx 
1 CCC 5  yyy 
2 BBB 6  yyy 
2 BBB 6  zzz 
2 CCC 6  yyy 
2 CCC 6  zzz 
2 AAA 6  yyy 
2 AAA 6  zzz 

、AND NAME_1NAME_2を(GROUPNAMEで始まる列の数が多いので、手動で列挙したくありません)。

私は現在、上記の私の前の質問で提案されたソリューションを使用していますことは:

cols = ['ID', 'GROUP', 'COUNT', 'NAME'] 
df.set_index(['ID', 'COUNT', 'NAME']).stack().reset_index(name='GROUP')[cols] 

しかし、問題は、私はNAMEに同じ手順を適用すべきであるということです。列に複数の列を渡す必要があることを考慮して、このソリューションを更新することは可能ですか?

+0

希望の出力が何であるかを示してください。 –

+0

@DmitryPolonskiy:私の更新を見てください。 – Dinosaurius

答えて

0

あなたは

df1 = pd.melt(
    df, ['ID', 'COUNT', 'GROUP_1', 'GROUP_2', 'GROUP_3'], 
    ['NAME_1', 'NAME_2'], 
    value_name='NAME').drop('variable', axis=1) 

出力

ID COUNT GROUP_1 GROUP_2 GROUP_3 NAME 
0 1  5  AAA  AAA  CCC xxx 
1 2  6  BBB  CCC  AAA yyy 
2 1  5  AAA  AAA  CCC yyy 
3 2  6  BBB  CCC  AAA zzz 

は、その後で再びこれを溶融二回

まず一列にNAME列を溶かす前の回答と同様の方法を使用してmeltを使用することができますGROUP列

出力

ID COUNT NAME GROUP 
0 1  5 xxx AAA 
1 2  6 yyy BBB 
2 1  5 yyy AAA 
3 2  6 zzz BBB 
5 2  6 yyy CCC 
7 2  6 zzz CCC 
8 1  5 xxx CCC 
9 2  6 yyy AAA 
10 1  5 yyy CCC 
11 2  6 zzz AAA 
関連する問題