我有2个数据框如下:
DF1:
Materials Col2 Col3 ...
1 Wood metal X Y
2 Rock X Y
3 Rock Metal X Y
DF2:
Mat
1 Metal
2 ...
我想循环第一个数据帧,如果Materials的值包含我可以在df2中找到的单词,那么我会将其更改为1,所以我会得到:
DF1:
Materials Col2 Col3 ...
1 1 X Y
2 0 X Y
3 1 X Y
有什么建议吗?
非常感谢!
答案 0 :(得分:3)
#check if Materials column contains any words from df2. This will also handle both lower case and upper case matching
df1.Materials = df1.apply(lambda x: 1 if np.in1d(np.array(x.Materials.lower().split()),df2.Mat.str.lower()).any() else 0, axis=1)
df1
Out[2619]:
Materials Col2 Col3
1 1 X Y
2 0 X Y
3 1 X Y
答案 1 :(得分:0)
要在不使用apply
的情况下执行此操作,您可以使用pd.Series.str.contains
和np.where
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'Materials': ['Wood metal', 'Rock', 'Rock Metal'],
'Col2': ['X', 'X', 'X'], 'Col3': ['Y', 'Y', 'Y']})
df2 = pd.DataFrame({'Mat': ['Metal']})
df1['Materials'] = np.where(df1['Materials'].str.lower().str.contains('|'.join(df2['Mat']).lower()), 1, 0)