Поиск, если какое-либо слово присутствует в другом столбце кадра данных или в другом кадре данных, используя python

Привет у меня есть два DataFrames, как показано ниже

 DF1

 Alpha   |  Numeric  |  Special

 and     |  1        |   @
 or      |  2        |   $
         |  3        |   &  
         |  4        |     
         |  5        |     

а также

DF2 with single column

Content      |

boy or girl  |
school @ morn|

Я хочу найти, есть ли у кого-либо из столбца в DF1 ключевое слово в столбце содержимого DF2, и вывод должен быть в новом DF

 output_DF

 output_column|
 Alpha        |
 Special      |

кто-нибудь, помогите мне с этим

2 ответа

Вы можете применить метод Series.isin() для каждого столбца в df1, а затем вернуть имена столбцов, для которых есть вхождения:

import pandas as pd

d = {'Alpha' :['and', 'or'],'Numeric':[1, 2,3,4,5],'Special':['@', '$','&']}
df1 = pd.DataFrame(dict([ (k,pd.Series(v)) for k,v in d.iteritems() ]))

df2 = pd.DataFrame({'Content' :['boy or girl','school @ morn']})    

check = lambda r:[c for c in df1.columns if df1[c].dropna().isin(r).any()]
df3 = pd.DataFrame({'output_column' : df2["Content"].str.split(' ').apply(check)})

Это приводит к:

  output_column
0       [Alpha]
1     [Special]

У меня есть метод, который не очень хорош.

df1 = pd.DataFrame([[['and', 'or'],['1', '2','3','4','5'],['@', '$','&']]],columns=['Alpha','Numeric','Special'])    
print(df1)
       Alpha          Numeric    Special
0  [and, or]  [1, 2, 3, 4, 5]  [@, $, &]

df2 = pd.DataFrame([[['boy', 'or','girl']],[['school', '@','morn']]],columns=['Content'])    
print(df2)
             Content
0    [boy, or, girl]
1  [school, @, morn]

Сначала объедините данные df2:

df2list=[x for row in df2['Content'].tolist() for x in row]
print(df2list)
['boy', 'or', 'girl', 'school', '@', 'morn']

Затем получение данных каждого столбца df1 пересекается с df2list:

containlistname = []
for i in range(0,df1.shape[1]):
    columnsname = df1.columns[i]
    df1list=[x for row in df1[columnsname].tolist() for x in row]
    intersection = list(set(df1list).intersection(set(df2list)))
    if len(intersection)>0:
        containlistname.append(columnsname)
output_DF = pd.DataFrame(containlistname,columns=['output_column'])

Окончательный вариант:

print(output_DF)
  output_column
0         Alpha
1       Special
Другие вопросы по тегам