Как сравнить значения ячеек двух разных DataFrames в Python? - PullRequest
0 голосов
/ 06 июня 2018

У меня есть два кадра данных:

Person_df

Name  Emplid  Country

    0  DK     123    India

    1  JS     456    India

    2  RM     789    China

    3  MS     111    China

    4  SR     222    China

Target_df

Country Category    Target

    0   India   Marketing   Reduce spend by $xy.

    1   India   R&D         Increase spend by $dd.

    2   India   Infra       Reduce spend by $kn.

    3   China   Marketing   Increase spend by $eg.

    4   China   R&D         Increase spend by $cb.

    5   China   Infra       Reduce spend by $mn.

Моя цель - создать третий DataFrame, основанный на стране каждого человека, который будет выглядеть следующим образом:

Individual_df

TargetID    Category    Target

    DK12301     Marketing   Reduce spend by $xy.

    DK12302     R&D         Increase spend by $dd.

    DK12303     Infra       Reduce spend by $kn.

    JS45601     Marketing   Reduce spend by $xy.

    JS45602     R&D         Increase spend by $dd.

    JS45603     Infra       Reduce spend by $kn.

    RM78901     Marketing   Increase spend by $eg.

    RM78902     R&D         Increase spend by $cb.

    RM78903     Infra       Reduce spend by $mn.

    MS11101     Marketing   Increase spend by $eg.

    MS11102     R&D         Increase spend by $cb.

    MS11103     Infra       Reduce spend by $mn.

    SR22201     Marketing   Increase spend by $eg.

    SR22202     R&D         Increase spend by $cb.

    SR22203     Infra       Reduce spend by $mn.

По сути, мне нужно взять человека из Person_df, сопоставить его / ее страну со страной, упомянутой в Target_df, а затем назначить каждому из этих целей это лицо (и сохранить в Individual_df).

Проблема в том, что я новичок в python и не могу понять, как провести сравнение стран.

Я написал код ниже:

for index, row in Person_df.iterrows():

     

        for index1, row1 in Goals_df.iterrows():

            If Person_df['country'] == Person_df['country'] : #I know this is incorrect

                data = [] 

                #populate data[] with selected values for one person.

                #append data[] to Individual_df

Мне нужна помощь по нескольким пунктам здесь:

1) Как на самом деле я могу провести здесь сравнение для страны каждого человека.

2) Даже если я знаюдля сравнения, код, который я написал, неэффективен, так как здесь я выполняю множество ненужных итераций.Любые указатели, как я могу улучшить это?

Спасибо!

1 Ответ

0 голосов
/ 06 июня 2018

попробуйте это,

Individual_df = pd.merge(Person_df, Target_df2, on=['Country'], how='left')
Individual_df['TargetID'] = Individual_df['Name'] + df3['Emplid'].astype(str) + ((df3.groupby('Emplid').cumcount() + 1).astype(str).str.zfill(2))
Individual_df = Individual_df[['TargetID', 'Category', 'Target']]
print Individual_df

Вывод:

   TargetID   Category                  Target
0   DK12301  Marketing    Reduce spend by $xy.
1   DK12302        R&D  Increase spend by $dd.
2   DK12303      Infra    Reduce spend by $kn.
3   JS45601  Marketing    Reduce spend by $xy.
4   JS45602        R&D  Increase spend by $dd.
5   JS45603      Infra    Reduce spend by $kn.
6   RM78901  Marketing  Increase spend by $eg.
7   RM78902        R&D  Increase spend by $cb.
8   RM78903      Infra    Reduce spend by $mn.
9   MS11101  Marketing  Increase spend by $eg.
10  MS11102        R&D  Increase spend by $cb.
11  MS11103      Infra    Reduce spend by $mn.
12  SR22201  Marketing  Increase spend by $eg.
13  SR22202        R&D  Increase spend by $cb.
14  SR22203      Infra    Reduce spend by $mn.

Объяснение:

  1. выполнить левое соединение с Person_df и Target_df
  2. затем создайте TargetID на основе Имени и Идентификатора сотрудника с учетом числа emp id
  3. извлекать обязательные столбцы

Как пользователь запросил получить строки для цикла for:

unique_countries=df1['Country'].unique().tolist()

for index, row in df2.iterrows():
    if row['Country'] in unique_countries:
        print row.values
        //do operation

Объяснение:

  1. найти уникальный элемент Person_df

  2. итерация Individual_df через цикл

  3. проверить, присутствует ли страна или нет в уникальном элементе (странах), если он присутствует, выполнить желаемую операцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...