2014-03-04 14 views
8

Ich habe den folgenden Code, der die Werte in einer Spalte eines Pandas Datenrahmens nimmt und sie zu den Spalten eines neuen Datenrahmens macht. Die Werte in der ersten Spalte des Datenrahmens werden zum Index des neuen Datenrahmens.Ändern der Spaltenwerte in Spaltenüberschriften in Pandas

In gewisser Hinsicht möchte ich eine Adjazenzliste in eine Adjazenzmatrix umwandeln. Hier ist der Code so weit:

import pandas as pa 
print "Original Data Frame" 
# Create a dataframe 
oldcols = {'col1':['a','a','b','b'], 'col2':['c','d','c','d'], 'col3':[1,2,3,4]} 
a = pa.DataFrame(oldcols) 
print a 

# The columns of the new data frame will be the values in col2 of the original 
newcols = list(set(oldcols['col2'])) 
rows = list(set(oldcols['col1'])) 

# Create the new data matrix 
data = np.zeros((len(rows), len(newcols))) 

# Iterate over each row and fill in the new matrix 
for row in zip(a['col1'], a['col2'], a['col3']): 
    rowindex = rows.index(row[0]) 
    colindex = newcols.index(row[1]) 
    data[rowindex][colindex] = row[2] 

newf = pa.DataFrame(data) 
newf.columns = newcols 
newf.index = rows 

print "New data frame" 
print newf 

Dies funktioniert für diesen speziellen Fall:

Original Data Frame 
    col1 col2 col3 
0 a c  1 
1 a d  2 
2 b c  3 
3 b d  4 
New data frame 
    c d 
a 1 2 
b 3 4 

Es wird scheitern, wenn die Werte in col3 sind keine Zahlen. Meine Frage ist, gibt es eine elegantere/robustere Art, dies zu tun?

Antwort

11

Das sieht aus wie a job for pivot:

import pandas as pd 
oldcols = {'col1':['a','a','b','b'], 'col2':['c','d','c','d'], 'col3':[1,2,3,4]} 
a = pd.DataFrame(oldcols) 

newf = a.pivot(index='col1', columns='col2') 
print(newf) 

Erträge

 col3 
col2  c d 
col1   
a  1 2 
b  3 4 

Wenn Sie nicht über eine Multiindex Spalte möchten, können Sie die col3 dort ablegen:

newf.columns = newf.columns.droplevel(0) 

was würden dann geben Sie

col2 c d 
col1  
a  1 2 
b  3 4 
+0

Wow, * fast * lässt mich bereuen, den Code zu schreiben, um es "manuell" zu machen :-P –

+2

Mach dir keine Sorgen - es macht Sie schätzen Pandas noch mehr! – unutbu

Verwandte Themen