如果值在另一个数据框中,则更改列值

时间:2017-05-17 20:41:58

标签: python pandas numpy

我有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

有什么建议吗?

非常感谢!

2 个答案:

答案 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.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)