Как проверить, содержит ли фрейм данных определенный элемент? - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть DataFrame с именем df, и я хочу знать, df содержит ли элемент a в каждой строке.

import pandas as pd
import numpy as np 
df=pd.DataFrame({'id':[1,2,3],'item1':['a','c','a'],
'item2':['b','d','e'],'item3':['c','e',np.nan]})

Input:

   id item1 item2 item3
0   1     a     b     c
1   2     c     d     e
2   3     a     e   NaN

В новом столбце contain_a, 1 представляет столбец item1, или item2, или item3 содержит элемент a.

Expected:

   id item1 item2 item3 contains_a
0   1     a     b     c         1
1   2     c     d     e         0
2   3     a     e   NaN         1

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Проверьте запрет каждого столбца id в столбце 1 (df.iloc[:, 1:]), используя метод доступа к строке, чтобы увидеть, содержит ли он букву a, а затем используйте any вдоль строк (axis=1).Преобразуйте логический результат в целое число (1 или 0).

>>> df.assign(contains_a=df.iloc[:, 1:].apply(lambda s: s.str.contains('a')).any(axis=1).astype(int))
   id item1 item2 item3  contains_a
0   1     a     b     c           1
1   2     c     d     e           0
2   3     a     e   NaN           1

Слишком много общего для нескольких целей:

targets = ['aa', 'a', 'b', 'c']
d = {'contains_{}'.format(target): 
         df.iloc[:, 1:].apply(lambda s: s.str.contains(target)).any(axis=1).astype(int)
     for target in targets}

>>> df.assign(**d)
   id item1 item2 item3  contains_a  contains_aa  contains_b  contains_c
0   1     a     b     c           1            0           1           1
1   2     c     d     e           0            0           0           1
2   3     a     e   NaN           1            0           0           0
0 голосов
/ 22 сентября 2018

Использование

In [578]: df['contains_a'] = df.filter(like='item').eq('a').any(1).astype(int)

In [579]: df
Out[579]:
   id item1 item2 item3  contains_a
0   1     a     b     c           1
1   2     c     d     e           0
2   3     a     e   NaN           1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...