2016-10-06 187 views
3

我有一個數據幀列是列出排序列表

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

我想通過其獨特的值(「A」,「B」使用這個列表組的集合] & ['a','c']))。然而,這會產生一個錯誤

TypeError: unhashable type: 'list' 

有沒有什麼辦法解決這個問題。理想情況下,我想對這些值進行排序並創建一個連續字符串的附加列。

+0

什麼是你想要的輸出? – IanS

+0

你的意見是什麼? – estebanpdl

回答

3

您也可以按列對值排序。

例子:

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] 

但是,我的理解,要排序[b, a][a, b],並[c, a][a, c],然後才能set值只得到[a, b][a, c]

我建議你使用lambda

嘗試:

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

它返回:

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

然後得到獨特的價值觀:

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

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

謝謝。我去了一位同事的建議,這是一個我們np.where,這樣'df ['b'] = np.where(df.a [0]

+0

歡迎您!這是一個很好的解決方案。 – estebanpdl

3

列表不可用。然而,元組是可哈希

使用

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

設置
df = pd.DataFrame(dict(a=[list('ab'), list('ba'), list('ac'), list('ca')]))
結果
df.groupby([df.a.apply(tuple)]).size()

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