2017-08-03 4 views
1

Hallo alle so habe ich 2 Datenrahmen ich in einer bestimmten Reihenfolge zu fusionieren und Gruppe versuche:reorganisieren Datenrahmen in einer bestimmten Reihenfolge

df1 
    LC_REF  Category  PRDGRP 
0 17 1C  H   Ferrari,Lambo,Merc 
1 17 1C  M   Doritos,Lays,Funyun 
2 17 1C  P   Cats,Dogs,Rabbits 
3 16 2C  H   Aston,Hyundai,Honda 
4 16 2C  M   Cheeto, Vicks 
5 16 2C  P   Rat,Pig,Flamingo 
6 17 2C  M   See,Sea,Far 


df2 
    LC_REF  Category  PRDGRP 
0 17 1C   H   foo,bar 
1 17 1C   M   foo,bar1 
2 16 2C   H   foo,bar2 
3 16 2C   M   foo,bar3 
4 17 2C   H   foo,bar4 
5 17 2C   M   foo,bar5 
6 17 2C   P   foo,bar6 

Und ich bin auf der Suche, sie verschmelzen, so dass alle M eines LC_REF gestapelt ist, dann alle H's, dann alle P's, dann bewege dich auf den zweiten LC_REF. Ordnung spielt keine Rolle, sollte aber konsistent sein. Hoffentlich macht Sinn:

df3 
    LC_REF  Category  PRDGRP 
0 17 1C  M   Doritos,Lays,Funyun 
1 17 1C  M   foo,bar1 
2 17 1C  H   Ferrari,Lambo,Merc 
3 17 1C  H   foo,bar 
4 17 1C  P   Cats,Dogs,Rabbits 
5 16 2C  M   Cheeto, Vicks 
6 16 2C  M   foo,bar3 
7 16 2C  H   Aston,Hyundai,Honda 
8 16 2C  H   foo,bar4 
9 17 2C  M   See,Sea,Far 
10 17 2C  M   foo,bar5 
11 17 2C  P   foo,bar6 

Ich habe versucht, Variationen von concat und ohne Erfolg anhängen:

pd.concat([df1,df2]).sort_index().reset_index(drop=True) 

ist fast in der Nähe, aber die LC_REF sind aus der Ordnung

Antwort

2

Lasst uns pd.concat verwenden und sort_values:

df_out = pd.concat([df1,df2]) 
df_out['Category'] = df_out.Category.astype('category', categories=['M','H','P'], ordered=True) 
df_out.sort_values(by=['LC_REF','Category']) 

Ausgang:

LC_REF Category    PRDGRP 
4 16 2C  M  Cheeto, Vicks 
3 16 2C  M    foo,bar3 
3 16 2C  H Aston,Hyundai,Honda 
2 16 2C  H    foo,bar2 
5 16 2C  P  Rat,Pig,Flamingo 
1 17 1C  M Doritos,Lays,Funyun 
1 17 1C  M    foo,bar1 
0 17 1C  H Ferrari,Lambo,Merc 
0 17 1C  H    foo,bar 
2 17 1C  P Cats,Dogs,Rabbits 
6 17 2C  M   See,Sea,Far 
5 17 2C  M    foo,bar5 
4 17 2C  H    foo,bar4 
6 17 2C  P    foo,bar6 
+0

Verrückt! Ich habe gerade etwas Ähnliches versucht. Gibt es eine Möglichkeit, die ursprüngliche Reihenfolge beizubehalten? – codeninja

+0

Schließen ... das war meine erste Vermutung. Die Kategorie Reihenfolge ist deaktiviert. –

+0

Ich denke, ich verstehe es nicht. –

Verwandte Themen