2016-10-06 14 views
3

ich eine Dataframe Spalte haben, die eine Sammlung von Listensortieren Listen in einer Pandas Dataframe Spalte

a 
['a', 'b'] 
['b', 'a'] 
['a', 'c'] 
['c', 'a'] 

Ich möchte diese Liste Gruppe durch seine einzigartige Werte ([ ‚a‘, ‚b‘ verwenden, ] & ['a', 'c']). Dies erzeugt jedoch einen Fehler

TypeError: unhashable type: 'list' 

Gibt es einen Weg um dies. Im Idealfall möchte ich die Werte an Ort und Stelle sortieren und eine zusätzliche Spalte einer verketteten Zeichenfolge erstellen.

+0

Was ist Ihre gewünschte Ausgabe

würde ich Gebrauch lambda

Versuchen empfehlen? – IanS

+0

Was ist Ihre Eingabe? – estebanpdl

Antwort

3

Sie können die Werte auch nach Spalten sortieren.

Beispiel:

x = [['a', 'b'], ['b', 'a'], ['a', 'c'], ['c', 'a']] 
df = pandas.DataFrame({'a': Series(x)}) 
df.a.sort_values() 

    a 
0 [a, b] 
2 [a, c] 
1 [b, a] 
3 [c, a] 

aber für das, was ich verstehe, wollen Sie [b, a]-[a, b] und [c, a] zu [a, c] sortieren und dann set Werte um [a, b][a, c] nur zu bekommen.

result = df.a.sort_values().apply(lambda x: sorted(x)) 
result = DataFrame(result).reset_index(drop=True) 

Es gibt:

0 [a, b] 
1 [a, c] 
2 [a, b] 
3 [a, c] 

Dann erhalten eindeutige Werte:

newdf = pandas.DataFrame({'a': Series(list(set(result['a'].apply(tuple))))}) 
newdf.sort_values(by='a') 

    a 
0 (a, b) 
1 (a, c) 
+1

Danke. Ich ging mit einem Vorschlag von einem Kollegen, der t us np. wo, so dass df ['b'] = np. wo (df.a [0]

+0

Ihre Begrüßung! Das ist eine gute Lösung. – estebanpdl

3

Liste nicht abspeicherbar. jedoch sind Tupel hashable

Verwendung

df.groupby([df.a.apply(tuple)]) 

Setup
df = pd.DataFrame(dict(a=[list('ab'), list('ba'), list('ac'), list('ca')]))
Ergebnisse
df.groupby([df.a.apply(tuple)]).size()

a 
(a, b) 1 
(a, c) 1 
(b, a) 1 
(c, a) 1 
dtype: int64 
Verwandte Themen