如何比较2个Pandas数据框并基于比较添加新列

时间:2019-05-02 16:52:06

标签: python pandas dataframe

我有两个数据框,需要比较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创建一个新数据框,但采用该票证ID的前一周状态并将其添加到新数据框中作为最后一列。如果从上周到新周出现了新票证(即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 :(得分:0)

这应该做:

df_A.set_index('ticket_id', inplace=True)
df_B.set_index('ticket_id', inplace=True)
df_A['previous week status']=df_B.status

答案 1 :(得分:0)

正如@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
                    )

有关更多信息,请查看Pandas Merging 101the official documentation