【问题标题】:How to compare 2 Pandas dataframes and add a new column based on comparison如何比较 2 个 Pandas 数据框并根据比较添加新列
【发布时间】:2019-05-03 01:45:54
【问题描述】:

我有两个需要比较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

【问题讨论】:

标签: python pandas dataframe


【解决方案1】:

应该这样做:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-10
      • 2020-11-25
      • 1970-01-01
      • 2019-06-13
      • 2019-09-26
      • 1970-01-01
      相关资源
      最近更新 更多