2017-01-04 4 views
0

Dies ist die Fortsetzung von my previous question.Wie übergebe ich Zeilen zu mehreren Spaltengruppen?

Ich habe den Datensatz:

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 

Das Ergebnis sollte dies ein:

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 

Ich möchte in Reihe passieren die Werte von GROUP_1, GROUP_2 und GROUP_3 UND NAME_1 und NAME_2 (Wenn man bedenkt, dass die Anzahl der Spalten, die mit GROUP und NAME beginnen, groß ist, möchte ich sie nicht manuell aufzählen).

ich zur Zeit die Lösung in meiner vorherigen Frage oben genannten vorgeschlagenen bin mit:

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

jedoch das Problem, dass ich das gleiche Verfahren NAME gelten sollte. Ist es möglich, diese Lösung zu aktualisieren, wenn man berücksichtigt, dass es mehrere Spaltengruppen gibt, die an Zeilen übergeben werden sollen?

+0

Bitte zeigen, was gewünscht wird ausgegeben. –

+0

@DmitryPolonskiy: Bitte sehen Sie mein Update. – Dinosaurius

Antwort

0

Sie können melt zweimal die gleiche Methode verwenden wie die vorherige Antwort mit

zuerst den Namen Spalten in eine Spalte schmelzen

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

Ausgabe

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 

Dann wieder diese eine Schmelze durch die Gruppenspalten

df2 = pd.melt(
    df1, ['ID', 'COUNT', 'NAME'], 
    ['GROUP_1', 'GROUP_2', 'GROUP_3'], 
    value_name='GROUP').drop('variable', axis=1).drop_duplicates() 
691.363.210

Ausgabe

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 
Verwandte Themen