如何在Pandas DF列中对值进行排序并删除重复项

时间:2018-03-16 17:59:42

标签: python python-3.x pandas sorting

这可能是一个非常基本的问题,但我还没有找到答案,所以这里就是......

问题:

是否有说法按字母顺序对值进行排序,同时还删除任何重复的实例?

以下是我所拥有的:

data = ['Car | Book | Apple','','Book | Car | Apple | Apple']
df = pd.DataFrame(data,columns=['Labels']
print(df)

    Labels
0   Car | Book | Apple
1   
2   Book | Car | Apple | Apple

期望的输出:

    Labels
0   Apple | Book | Car
1   
2   Apple | Book | Car

谢谢!

3 个答案:

答案 0 :(得分:3)

str.join

之后

str.split

df=df.replace({' ':''},regex=True)
df.Labels.str.split('|').apply(set).str.join('|')
Out[339]: 
0    Apple|Book|Car
1                  
2    Apple|Book|Car
Name: Labels, dtype: object

根据评论添加sorted

df.Labels.str.split('|').apply(lambda x : sorted(set(x),reverse=False)).str.join(' | ')

答案 1 :(得分:3)

一种方法是pd.Series.map使用sorted&按set分割后|

import pandas as pd

data = ['Car | Book | Apple','','Book | Car | Apple | Apple']
df = pd.DataFrame(data,columns=['Labels'])

df['Labels'] = df['Labels'].map(lambda x: ' | '.join(sorted(set(x.split(' | ')))))

#                Labels
# 0  Apple | Book | Car
# 1                    
# 2  Apple | Book | Car

答案 2 :(得分:2)

df['Labels'].str.split('|')会将字符串拆分为|并返回列表

#0             [Car ,  Book ,  Apple]
#1                                 []
#2    [Book ,  Car ,  Apple ,  Apple]
#Name: Labels, dtype: object

看到结果列表元素中有多余的空格。删除这些内容的一种方法是将str.strip()应用于列表中的每个元素:

df['Labels'].str.split('|').apply(lambda x: map(str.strip, x))
#0           [Car, Book, Apple]
#1                           []
#2    [Book, Car, Apple, Apple]
#Name: Labels, dtype: object

最后,我们应用set构造函数来删除重复项,对值进行排序,并使用" | "作为分隔符将它们重新连接在一起:

df['Labels'] = df['Labels'].str.split('|').apply(
    lambda x: " | ".join(sorted(set(map(str.strip, x))))
)
print(df)
#               Labels
#0  Apple | Book | Car
#1                    
#2  Apple | Book | Car