Python 如果值位于另一个数据帧中,请更改列值

Python 如果值位于另一个数据帧中,请更改列值,python,pandas,numpy,Python,Pandas,Numpy,我有两个数据帧,如下所示: df1: df2: 我想循环第一个数据帧,如果Materials的值包含一个我可以在df2中找到的单词,那么我会将其更改为1,以便得到: df1: 有什么建议吗 非常感谢 要在不使用apply的情况下执行此操作,可以使用pd.Series.str.contains和np.where #check if Materials column contains any words from df2. This will also handle both lower case

我有两个数据帧,如下所示:

df1:

df2:

我想循环第一个数据帧,如果Materials的值包含一个我可以在df2中找到的单词,那么我会将其更改为1,以便得到:

df1:

有什么建议吗


非常感谢

要在不使用
apply
的情况下执行此操作,可以使用
pd.Series.str.contains
np.where

#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
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)

要在不使用
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)
#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
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)