我有一个像这样的数据帧
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:值的长度与索引的长度不匹配
通过使用列表理解,这一行应该足够了:
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