2016-09-21 13 views
2

Ich bin ziemlich neu in Python.Machen Sie eine Tabelle aus 2 Spalten

Ich habe 2 Spalten auf einem Datenrahmen, Säulen sind so etwas wie:

db = pd.read_excel(path_to_file/file.xlsx) 
db = db.loc[:,['col1','col2']] 

col1 col2 
C  4 
C  5 
A  1 
B  6 
B  1 
A  2 
C  4 

ich sie brauche so sein:

1 2 3 4 5 6 
A 1 1 0 0 0 0 
B 1 0 0 0 0 1 
C 0 0 0 2 1 0 

so wirken sie wie Zeilen und Spalten und Werte beziehen sich auf die Anzahl der Zufälle.

+0

die Daten verwenden? Ich lese es aus einer Datei –

+2

Natürlich, aber wie? Geben Sie den Code an und wir können Ihnen vielleicht weiterhelfen. – Jan

Antwort

2

Sagen Sie Ihre Spalten genannt werden cat und val:

In [26]: df = pd.DataFrame({'cat': ['C', 'C', 'A', 'B', 'B', 'A', 'C'], 'val': [4, 5, 1, 6, 1, 2, 4]}) 

In [27]: df 
Out[27]: 
    cat val 
0 C 4 
1 C 5 
2 A 1 
3 B 6 
4 B 1 
5 A 2 
6 C 4 

Dann können Sie die Tabelle hierarchicaly groupby, dann unstack es:

In [28]: df.val.groupby([df.cat, df.val]).sum().unstack().fillna(0).astype(int) 
Out[28]: 
val 1 2 4 5 6 
cat    
A 1 2 0 0 0 
B 1 0 0 0 6 
C 0 0 8 5 0 

bearbeiten

Wie IANS wies darauf hin, , 3 fehlt hier (danke!). Wenn es eine Reihe von Spalten gibt, die Sie haben müssen, dann können Sie

+0

Spalte '3' fehlt ... – IanS

+0

@IanS Du hast recht - danke! (Hinzugefügt) –

1

Ich glaube, Sie von size aggreagate benötigen und fügen Sie Werte in den Spalten von reindex fehlt:

print (df) 
    a b 
0 C 4 
1 C 5 
2 A 1 
3 B 6 
4 B 1 
5 A 2 
6 C 4 

df1 = df.b.groupby([df.a, df.b]) 
      .size() 
      .unstack() 
      .reindex(columns=(range(1,df.b.max() + 1))) 
      .fillna(0) 
      .astype(int) 

df1.index.name = None 
df1.columns.name = None 
print (df1) 
    1 2 3 4 5 6 
A 1 1 0 0 0 0 
B 1 0 0 0 0 1 
C 0 0 0 2 1 0 

Statt size Sie count verwenden können, size zählt NaN Werte, tut count nicht.

+0

Spalte '3' fehlt ... – IanS

+0

Ja, danke. Ich füge es hinzu. – jezrael

+0

Wenn Ausgabe wie in Ihrer Frage ausgegeben wird, verwenden Sie 'size' Funktion. – jezrael

Verwandte Themen