2017-01-17 4 views
2

ich einen Datenrahmen wie diese:Pandas Datenrahmen reshape werfen

import pandas 
df=pandas.DataFrame([['a','b'],['a','c'],['b','c'],['b','d'],['c','f']],columns=['id','key']) 
print(df) 

    id key 
0 a b 
1 a c 
2 b c 
3 b d 
4 c f 

das Ergebnis, das ich wollte:

id key 
0 a b,c 
1 b c,d 
2 c f 

I Verwendung Pivot-Funktion versuchen, aber ich habe nicht das Ergebnis. Die Cast-Pakete in R scheinen das Problem anzugehen. Vielen Dank!

Antwort

2

Sie benötigen groupby mit applyjoin:

df1 = df.groupby('id')['key'].apply(','.join).reset_index() 
print (df1) 
    id key 
0 a b,c 
1 b c,d 
2 c f 
2

ein numpy Ansatz

g = df.id.values 
k = df.key.values 
a = g.argsort(kind='mergesort') 
gg = g[a] 
kg = k[a] 

w = np.where(gg[:-1] != gg[1:])[0] 

pd.DataFrame(dict(
     id=gg[np.append(w, len(a) - 1)], 
     key=[','.join(l.tolist()) for l in np.split(kg, w + 1)] 
    )) 

    id key 
0 a b,c 
1 b c,d 
2 c f 

Geschwindigkeit gegen Intuition

enter image description here