2017-07-22 5 views
1

Hey ich habe Daten wie dieseWie verwende ich die Kreuztabelle, um die Frequenzliste anzuzeigen?

[ID] [DATE] [STOCK] 
1 1/1/1 123 
1 1/2/1 125 
2 1/2/1 223 
1 2/2/1 234 
1 1/1/1 R123 

HABE ICH APPLIED CROSS TAB ZU Identifikation mit Datum und GOT THIS: -

train_ = pd.crosstab(train.ID, train.DATE) 
[ID] [1/1/1] [1/2/1] [2/2/1] 
1 1 1 1 
2 0 1 0 

I OUTPUT WILL LIKE

[ID] [1/1/1] [1/2/1] [2/2/1] 
1 [123,R123] [125] [234] 
2 [] [223] [] 

Antwort

2

Sie sein benötigen Sie pivot oder set_index + unstack für die Umformung:

df1 = df.pivot(index='ID', columns='DATE', values='STOCK') 
print (df1) 
DATE 1/1/1 1/2/1 2/2/1 
ID      
1  123.0 125.0 234.0 
2  NaN 223.0 NaN 

df1 = df.set_index(['ID','DATE'])['STOCK'].unstack() 
print (df1) 
DATE 1/1/1 1/2/1 2/2/1 
ID      
1  123.0 125.0 234.0 
2  NaN 223.0 NaN 

Wenn es Duplikate in Spalten neuen Index und Spalten erstellt:

print (df) 
    ID DATE STOCK 
0 1 1/1/1 123.0<-same ID=1, DATE=1/1/1 
1 1 1/1/1 200.0<-same ID=1, DATE=1/1/1 
2 1 1/2/1 125.0 
3 2 1/2/1 223.0 
4 1 2/2/1 234.0 

... dann brauchen groupby + apply + unstack:

None zu empty list ist nicht so einfach ersetzen :

a = [[[] for x in range(len(df1.columns))] for y in range(len(df1.index))] 
df2 = pd.DataFrame(a, index=df1.index, columns=df1.columns) 
df1 = df1.fillna(df2) 
print (df1) 
DATE   1/1/1 1/2/1 2/2/1 
ID          
1  [123.0, 200.0] [125.0] [234.0] 
2     [] [223.0]  [] 
+0

Aber Index con Tains doppelte Einträge, kann nicht umformen – Karandeepdps

+0

Ok, gib mir eine Sekunde. – jezrael

+0

Danke! aber ich möchte nicht Aggregationsfunktion verwenden, wenn es doppelte Daten gibt -> eine Liste machen und speichern – Karandeepdps

Verwandte Themen