2017-05-17 7 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 

多くの感謝! applyを使用せずにこれを行うには

答えて

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

、あなたが使用することができ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)