簡體   English   中英

在Pandas Dataframe列中對列表進行排序

[英]Sort lists in a Pandas Dataframe column

我有一個Dataframe列,它是一個列表集合

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

我想使用此列表按其唯一值(['a','b']和['a','c'])進行分組。 但是,這會產生錯誤

TypeError: unhashable type: 'list'

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

您還可以按列對值進行排序。

例:

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)

列表是不可用的。 但是,元組是可以清洗的

使用

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM