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?
Wow, * fast * lässt mich bereuen, den Code zu schreiben, um es "manuell" zu machen :-P –
Mach dir keine Sorgen - es macht Sie schätzen Pandas noch mehr! – unutbu