2017-05-24 8 views
2

Ich versuche zu erweitern (nicht sicher, ob es das richtige Wort ist) einige kategorische Daten in Spalten mit Pandas.Kategorie in einer Spalte zu Spaltennamen in Pandas erweitern

Lassen Sie uns sagen, dass ich die folgende Datenrahmen haben:

df = pandas.DataFrame({'name': ['john', 'john', 'louis', 'louis'], 
         'day':['a', 'b', 'a', 'b'], 'oranges':[10, 23, 15, 5], 
         'apple': [5, 4, 1, 3]}) 

Welche dieser Tabelle erzeugt:

 apple day name oranges 
    0  5 a john  10 
    1  4 b john  23 
    2  1 a louis  15 
    3  3 b louis  5 

Ich möchte einige Pandas Methode verwenden, um eine Tabelle wie folgt zu erzeugen:

apple_a apple_b name oranges_a oranges_b 
0  5  4 john   10   23 
1  1  3 louis  15   5 

Bisher habe ich versucht:

df.pivot('name', columns='day') 

     apple  oranges 
    day  a b  a b 
    name 
    john  5 4  10 23 
    louis  1 3  15 5 

Meine Frage ist: Wie kann ich meine Daten teilen und mehr Spalten basierend auf einer kategorischen Information mit Pandas erstellen?

Vielen Dank im Voraus,

Rhenan

Antwort

2

Sie haben bereits die gewünschte Ausgabe erhalten, müssen Sie die Spaltennamen

df = df.pivot('name', columns='day') 
df.columns = ['_'.join(col).strip() for col in df.columns.values] 
df = df.reset_index() 

    name apple_a apple_b oranges_a oranges_b 
0 john 5  4  10   23 
1 louis 1  3  15   5 
2

versuchen Lassen Sie set_index verwenden, stack, unstack dann auf eine signle Ebene, dass die Multiindex Spalten Abbildung map und join mit:

df.set_index(['name','day']).stack().unstack([2,1]) 
df_1.columns = df_1.columns.map('_'.join) 
print(df_1) 

Ausgang:

 apple_a oranges_a apple_b oranges_b 
name           
john   5   10  4   23 
louis  1   15  3   5 
1

danken Ihnen viel alle sehr zu formatieren! Basierend auf Ihren Antworten, die ich habe einen Code bekommen, die den Trick:

n_df = df.pivot('name', columns='day') 
n_df.columns = n_df.columns.map('_'.join) 

Ausgang:

 apple_a apple_b oranges_a oranges_b 
    name 
    john  5  4   10   23 
    louis  1  3   15   5 

Nochmals vielen Dank!

+0

Warum nicht das Beste aus beiden Lösungen nehmen? +1 –

+1

Großartig, dass es für Sie gearbeitet hat, vergessen Sie nicht, eine Antwort zu akzeptieren. @ ScottBostons Lösung der Zuordnung von Multiindex-Spalten auf einzelne Ebene ist weit überlegen, also würde ich damit gehen. – Vaishali

Verwandte Themen