Как сравнить 2 кадра данных Pandas и добавить новый столбец на основе сравнения - PullRequest
1 голос
/ 02 мая 2019

У меня есть два кадра данных, которые требуют сравнения столбца ticket_id.Если есть совпадение, мне нужно добавить столбец в первый кадр данных, который поступает из столбца из второго кадра данных.Если между первым кадром данных и вторым кадром данных нет соответствия, то это означает, что во втором кадре данных есть новая строка, которую необходимо добавить к первому.

Я пытался использовать операторы if, но безуспешновозможность сравнить их.

df_A (отчет о билетах службы поддержки на текущей неделе)

ticket_id   category   submitted  closed   status   
1           critical   4/20/19    5/1/19   closed
2           low        4/23/19    5/2/19   closed
3           medium     4/26/19             open
4           low        5/1/19              open

df_B (отчет о билетах службы поддержки на предыдущей неделе)

ticket_id   category   submitted  closed   status   
1           critical   4/20/19             open
2           low        4/23/19             open
3           medium     4/26/19             open

Так что я по сутиВы хотите создать новый фрейм данных на основе df_A, но принять статус предыдущей недели для этого идентификатора заявки и добавить его в новый фрейм данных в качестве последнего столбца.Если новый билет появляется с предыдущей недели до новой недели (т. Е. Ticket_id = 4), он должен быть добавлен, и должен быть статус NA или пробел (не имеет значения).

Ожидается df_A

ticket_id   category   submitted  closed   status  previous_week_status  
1           critical   4/20/19    5/1/19   closed  open
2           low        4/23/19    5/2/19   closed  open
3           medium     4/26/19             open    open
4           low        5/1/19              open    NA

Ответы [ 2 ]

0 голосов
/ 02 мая 2019

Как уже отметил @Erfan, лучше всего решить эту проблему, переименовав и объединив фрейм данных.

df_B_reduced=(df_B.rename(columns={"status":"previous_week_status"})
                .drop(["category","submitted", "closed"]) # drop duplicate info
              )
df_merged=df_A.merge(right=df_B_reduced,
                     how='left', # if an entry is in A, but not in B, add NA values
                     on=["ticket_id"],  # property to merge on
                     validate="one_to_one" # (optional) Check that your ticket_id is actually a unique id
                    )

Для получения дополнительной информации см. Слияние панд 101 или официальная документация .

0 голосов
/ 02 мая 2019

Это должно сделать:

df_A.set_index('ticket_id', inplace=True)
df_B.set_index('ticket_id', inplace=True)
df_A['previous week status']=df_B.status
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...