提问者:小点点

Pandas:如果list包含另一个list(x)中的元素,将匹配的x元素添加到一个新列中


我有一个像这样的数据帧

col1    col2     col3     
1       ab       [p,q,r,s]
2       rx       [t,u,v,w]
3       pq       [h,a,g,s]

和另一个列表x=[g,t,r,c]

我想创建一个新列col4,该列将包含与列表X中的col3匹配的元素。

执行完代码后,数据帧将如下所示:

col1    col2     col3          col4
1       ab       [p,q,r,s]      r
2       rx       [t,u,v,w]      t    
3       pq       [h,a,g,s]      g

下面是我尝试的方法:

x=['g','t','r','c']
for i in df['col3']:
    if (any(elem in i for elem in x)):
        df['col4']=x

我得到以下错误:valueerror:值的长度与索引的长度不匹配


共3个答案

匿名用户

通过使用列表理解,这一行应该足够了:

df['col4'] = [ list(set(x) & set(df['col3'][i]) for i in range(len(df['col3']))]

匿名用户

您可以使用apply方法,如下所示

df['col4'] = df['col3'].apply(lambda y : [k for k in y if k in x])

如果有多个匹配项,也会处理好

匿名用户

你可以试试

s=df.col3.str.join(',').str.get_dummies(',').reindex(columns=x,fill_value=0)
df['new']=s.dot(s.columns)
df
Out[290]: 
   col1 col2          col3 new
0     1   ab  [p, q, r, s]   r
1     2   rx  [t, u, v, w]   t
2     3   pq  [h, a, g, s]   g