这可能是一个非常基本的问题,但我还没有找到答案,所以这里就是......
问题:
是否有说法按字母顺序对值进行排序,同时还删除任何重复的实例?
以下是我所拥有的:
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
谢谢!
答案 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