2017-07-22 3 views
1

Hey i contiennent des données comme celui-ciComment utiliser le tableau croisé pour afficher la liste des fréquences?

[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 

J'AI APPLIED CROSS TAB iD AVEC DATE ET OBTENU CE: -

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 

JE VEUX SORTIE être comme

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

Répondre

2

Vous besoin d'utiliser pivot ou set_index + unstack pour remodeler:

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 

S'il y a des doublons dans les colonnes créées et colonnes nouvel indice:

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 

... alors besoin groupby + apply + unstack:

Remplacer None-empty list est pas si facile :

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

Mais Index avec tains entrées en double, ne peut pas remodeler – Karandeepdps

+0

Ok, donnez-moi une seconde. – jezrael

+0

Merci! mais je ne veux pas utiliser la fonction d'agrégation, s'il y a des données en double -> faire une liste et stocker – Karandeepdps