在Pandas Dataframe列中对列表进行排序

Jac*_*per 6 python dataframe pandas

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

    a
['a', 'b']
['b', 'a']
['a', 'c']
['c', 'a']
Run Code Online (Sandbox Code Playgroud)

我想使用此列表按其唯一值(['a','b']和['a','c'])进行分组.但是,这会产生错误

TypeError: unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)

有没有办法解决.理想情况下,我想对值进行排序,并创建一个连接字符串的附加列.

est*_*pdl 7

您还可以按列对值进行排序.

例:

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]
Run Code Online (Sandbox Code Playgroud)

但是,我的理解,要排序[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)
Run Code Online (Sandbox Code Playgroud)

它返回:

0    [a, b]
1    [a, c]
2    [a, b]
3    [a, c]
Run Code Online (Sandbox Code Playgroud)

然后获得唯一值:

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

     a
0   (a, b)
1   (a, c)
Run Code Online (Sandbox Code Playgroud)

  • 您还可以使用“apply(sorted)”,因为它相当于“apply(lambda x:sorted(x))” (2认同)