让我们将其用作示例数据集:
Year Breeds
0 2009 Collie
1 2010 Shepherd
2 2011 Collie, Shepherd
3 2012 Shepherd, Retriever
4 2013 Shepherd
5 2014 Shepherd, Bulldog
6 2015 Collie, Retriever
7 2016 Retriever, Bulldog
我想创建一个列表dogs
,其中dogs
包含唯一的狗品种Collie, Shepherd, Retriever, Bulldog
。我知道它就像在相应的列上调用.unique()
一样简单,但我遇到的问题是Breeds
列中有多个值。有什么想法来规避这个吗?
谢谢!
答案 0 :(得分:1)
编辑:
如果需要提取所有可能的值,请使用split
:
df['new'] = df['Breeds'].str.split(', ')
对于唯一值转换为set
s:
df['new'] = df['Breeds'].str.split(', ').apply(lambda x: list(set(x)))
或使用列表理解:
df['new'] = [list(set(x.split(', '))) for x in df['Breeds']]
如果只想提取一些值,请使用findall
为list
和regex
- |
提取OR
:
L = ["Collie", "Shepherd", "Retriever", "Bulldog"]
df['new'] = df['Breeds'].str.findall('|'.join(L))
如果可能重复:
df['new'] = df['Breeds'].str.findall('|'.join(L)).apply(lambda x: list(set(x)))
print (df)
Year Breeds new
0 2009 Collie [Collie]
1 2010 Shepherd [Shepherd]
2 2011 Collie, Shepherd [Collie, Shepherd]
3 2012 Shepherd, Retriever [Shepherd, Retriever]
4 2013 Shepherd [Shepherd]
5 2014 Shepherd, Bulldog [Shepherd, Bulldog]
6 2015 Collie, Retriever [Collie, Retriever]
7 2016 Retriever, Bulldog [Retriever, Bulldog]