2017-05-17 206 views
0

我有2個數據幀如下:更改列值,如果值是對其他數據框

DF1:

 Materials  Col2  Col3 ... 
1  Wood metal  X   Y 
2  Rock   X   Y 
3  Rock Metal  X   Y 

DF2:

 Mat 
1  Metal 
2  ... 

我想環路在第一數據幀,如果材料的值包含我可以在df2中找到的單詞,那麼我會將其更改爲1,因此我會得到:

df1 :

 Materials Col2  Col3 ... 
1   1   X   Y 
2   0   X   Y 
3   1   X   Y 

有什麼建議嗎?

非常感謝!

回答

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 
+0

謝謝它的工作! – hdatas

0

要做到這一點,而無需使用apply,你可以使用pd.Series.str.containsnp.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) 
相關問題