2017-03-07 2 views
1

meine CSV wie folgt aussieht:Pandas schwenken auf Spalte

"a","b","c","d" 
1, "x", 1, 1 
1, "y", 2, 2 

und ich möchte es konvertieren, basierend auf Spalte "b"

"a", "x_c", "y_c", "x_d", "y_d" 
1, 1, 2, 1, 2 

ich es mit Pivot versucht haben und unstack. Gibt es einen Mangel an Pandas?

EDIT: Ich habe mehrere Spalten deshalb brauche ich ein Suffix/Präfix

Antwort

5

Verwenden pivot_table anhängen:

df = df.pivot_table(index='a',columns='b', values=['c', 'd'], aggfunc=np.mean) 
#Multiindex to columns 
df.columns = df.columns.map(lambda x: '{}_{}'.format(x[1], x[0])) 
df = df.reset_index() 
print (df) 
    a x_c y_c x_d y_d 
0 1 1 2 1 2 

Auch wenn Duplikate, dann wird aggfunc angewendet:

print (df) 
    a b c d 
0 1 x 1 1 <-duplicates for 1, x 
1 1 y 2 2 
2 1 x 4 2 <-duplicates for 1, x 
3 2 y 2 3 


df = df.pivot_table(index='a',columns='b', values=['c', 'd'], aggfunc=np.mean) 
df.columns = df.columns.map(lambda x: '{}_{}'.format(x[1], x[0])) 
df = df.reset_index() 
print (df) 
    a x_c y_c x_d y_d 
0 1 2.5 2.0 1.5 2.0 <-x_c, x_d aggregated mean 
1 2 NaN 2.0 NaN 3.0