【问题标题】:Create new data frame based on another data frame基于另一个数据框创建新的数据框
【发布时间】:2019-02-02 22:28:50
【问题描述】:

我有这个数据框 DF1

emp_no  no_children  status
  1      3            3
  2      2            2
  23     5            5

还有另一个 DF2

emp_no  no_children  status
      1      3            3
      2      2            2
      3      5            5

我正在尝试创建一个基于 DF1 和 DF2 的新数据框,例如

emp_no no_children status
  23     5         5

新的 DF 应该包含不在 DF2 中的 emp_no

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    使用emp_no 列的ne 并使用df1 数据帧的切片。

    df1.loc[df1['emp_no'].ne(df2['emp_no']),:]
    
      emp_no    no_children status
    2     23              5      5
    

    【讨论】:

    • 这会很棘手,如果 emp_no 的顺序不同,并且假设 emp_no 是唯一的。
    • @Zero 你能用我不明白的例子解释一下吗?我也在编辑后写了这个解决方案,它解释了 df 的 emp_no 不应包含 df2emp_no
    【解决方案2】:

    您可以将mergehow='left'indicator=True 一起使用,然后过滤df1 中存在的行。

    In [277]: df1.merge(df2, indicator=True, how='left'
                  ).query('_merge == "left_only"'
                  ).drop('_merge', 1)
    Out[277]:
       emp_no  no_children  status
    2      23            5       5
    

    详情

    In [278]: df1.merge(df2, indicator=True, how='left')
    Out[278]:
       emp_no  no_children  status     _merge
    0       1            3       3       both
    1       2            2       2       both
    2      23            5       5  left_only
    
    In [279]: df1.merge(df2, indicator=True, how='left').query('_merge == "left_only"')
    Out[279]:
       emp_no  no_children  status     _merge
    2      23            5       5  left_only
    

    【讨论】:

      【解决方案3】:

      这将给出在 df2['emp_no'] 中找不到 df1['emp_no'] 的 df1 行(~ 是负数):

      df1.loc[~df1['emp_no'].isin(df2['emp_no'])]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-20
        • 1970-01-01
        • 2016-05-07
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        相关资源
        最近更新 更多