Сравните ряд строк со списком строк и получите совпадения подстрок - PullRequest
0 голосов
/ 17 июня 2020

Я хочу выяснить, присутствует ли подстрока в столбце DataFrame по сравнению со столбцом в другом кадре данных.

В моем примере DF2['Column y'] Я хочу

  • 'manager' против 'Software Developer Manager' и
  • 'executive' против 'Online Bidding Executive' и так далее

DF1:

      unique_values  counts  Rank  Stop_Word
0       manager    9322   1.0      False
1           for    8463   2.0       True
2     developer    7323   3.0      False
3     executive    5864   4.0      False
4      engineer    5669   5.0      False
5         sales    4492   6.0      False

DF2:

                                 ColumnX.                     Column y. 

0                                Digital Media Planner.       Nan. 
1                             Online Bidding Executive.       Executive
2                           Software Developer Manager        Manager
3                                    Technical Support.       Nan
4                    Software Test Engineer -hyderabad.       engineer
5               Opening For Adobe Analytics Specialist.       Nan
6       Sales- Fresher-for Leading Property Consultant.       Nan
7               Opportunity For Azure Devops Architect        Nan
8                                                  BDE.       Nan
9                   Technical Support/ Product Support.       Nan

Я хочу DF2['Column y'] в качестве вывода

Плюс, если присутствует несколько подстрок, то нужно рассматривать строку с минимальным рангом, как во втором значении индекса DF2: 'manager' считается больше 'developer'.

1 Ответ

0 голосов
/ 17 июня 2020

Я бы использовал apply; apply - это просто карта, которая применяет метод к каждой строке или столбцу. Результат можно поместить в отдельный столбец, как показано.

Установка фреймов данных ...

import pandas as pd
import re

df1 = {'unique_values': ['manager', 'for', 'developer', 'executive', 'engineer', 'sales'],
       'counts': [9322, 8463, 7323, 5864, 5669, 4492],
       'Rank': [1.0, 2.0, 3.0, 4.0, 5.0, 6.0],
       'Stop_word': [False, True, False, False, False, False]}
df1 = pd.DataFrame.from_dict(df1)

df2 = {'X': ['Digital Media Planner',
            'Online Bidding Executive',
            'Software Developer Manager',
            'Technical Support',
            'Software Test Engineer -hyderabad.Software Test Engineer -hyderabad',
            'Opening For Adobe Analytics Specialist.',
            'Sales- Fresher-for Leading Property Consultant.',
            'Opportunity For Azure Devops Architect',
            'BDE',
            'Technical Support/ Product Support.']}
df2 = pd.DataFrame.from_dict(df2)

Решение ...

def method(df1, df2_value):
    num_values = len(df1)

    for row_index in range(num_values):
        row = df1.iloc[[row_index]]
        df1_value = row.iloc[0,0]
        stop_word = row.iloc[0,3]

        if bool(re.search(df1_value, df2_value, re.IGNORECASE)):
            if stop_word:
                return None
            else:
                return df1_value

df2['Y'] = df2.apply(lambda row: method(df1, row.iloc[0]), axis=1)
print(df2)

output:

                                                X          Y
0                              Digital Media Planner       None
1                           Online Bidding Executive  executive
2                         Software Developer Manager    manager
3                                  Technical Support       None
4  Software Test Engineer -hyderabad.Software Tes...   engineer
5            Opening For Adobe Analytics Specialist.       None
6    Sales- Fresher-for Leading Property Consultant.       None
7             Opportunity For Azure Devops Architect       None
8                                                BDE       None
9                Technical Support/ Product Support.       None
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...