Python - добавить оператор ИЛИ в DataFrame Apply - PullRequest
0 голосов
/ 17 июня 2019

У меня есть этот фрейм данных:

word, string1, string2
SQL, SQL is good, Programming
Java, Programming, Java is good
C#, Programming, Programming

У меня есть столбец, который дает логическое значение, если значения моего столбца присутствуют в строке моего столбца1:

data['res'] = data.apply(lambda x: x.word in x.string1
                               if (x.string1 == x.string1) and (x.word == x.word)
                               else False)

Но чтоЯ хочу, чтобы увидеть, если значение слова столбца присутствует в столбце string1 ИЛИ в строке2?Примерно так:

data['res'] = data.apply(lambda x: x.word in x.string1
                               if (x.string1 == x.string1) and (x.word == x.word)
                               else (x.word in x.string2
                                    if (x.string2 == x.string2) and (x.word == x.word))axis=1)
                    else False)

Что я хочу:

word, string1, string2, res
SQL, SQL is good, Programming, True
Java, Programming, Java is good, True
C#, Programming, Programming, False

Можно ли это сделать?

Спасибо!

Ответы [ 2 ]

1 голос
/ 17 июня 2019

Самое простое - объединить оба столбца и добавить еще один фильтр:

data['res'] = data.apply(lambda x: x.word in x.string1 + x.string2
                               if (x.string1 == x.string1 ) and 
                                  (x.word == x.word) and 
                                  (x.string1 == x.string1)
                               else False, axis=1)
1 голос
/ 17 июня 2019

Необходимо проверить, присутствует ли строка в столбце 1 в каких-либо других столбцах, с any() по оси = 1:

df.apply(lambda x:x.str.contains(x.word),axis=1).iloc[:,1:].any(axis=1)

0     True
1     True
2    False

Полный код:

df=df.assign(res=df.apply(lambda x:x.str.contains(x.word),axis=1).iloc[:,1:].any(axis=1))

   word       string1        string2    res
0   SQL   SQL is good    Programming   True
1  Java   Programming   Java is good   True
2    C#   Programming    Programming  False
...