从包含多个值的pandas列创建列表

时间:2018-05-02 15:05:06

标签: python-3.x pandas

让我们将其用作示例数据集:

    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列中有多个值。有什么想法来规避这个吗?

谢谢!

1 个答案:

答案 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']]

如果只想提取一些值,请使用findalllistregex - |提取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]