【问题标题】:Comparing 2 values of same variable in single dataframe比较单个数据框中相同变量的 2 个值
【发布时间】:2020-04-25 16:23:01
【问题描述】:

我有一个如下的数据框:

Obs. ID   Name type
  1) 123  abc  duplicate
  2) 123  abc  duplicate
  3) 145  abc  abc
  4) 156  abc  duplicate
  5) 156  abc  duplicate

如果 ID 相同,例如在 obs 中。 1 和 2 或 4 和 5 然后我想在名称变量(即 abc)中创建一个新变量 type=duplicate else type=vaule

【问题讨论】:

    标签: python pandas dataframe string-comparison


    【解决方案1】:

    我们可以使用duplicatednp.where来根据结果设置值:

    df['type'] = np.where(df.duplicated('ID', False), 'Duplicate', 'Single')
    

    print(df)
    
      Obs.   ID Name       type
    0   1)  123  abc  Duplicate
    1   2)  123  abc  Duplicate
    2   3)  145  abc     Single
    3   4)  156  abc  Duplicate
    4   5)  156  abc  Duplicate
    

    对于更新,您只需要一个简单的 tweek:

    df['type'] = np.where(~df.duplicated('ID', False), df.Name, 'Duplicate')
    
    print(df)
    
      Obs.   ID Name       type
    0   1)  123  abc  Duplicate
    1   2)  123  abc  Duplicate
    2   3)  145  abc        abc
    3   4)  156  abc  Duplicate
    4   5)  156  abc  Duplicate
    

    【讨论】:

    • 您能告诉我当 ID 不重复(即 type=single)时如何在 TYPE 列中分配 Name 变量的值。
    • 但总体而言这是一个不同的问题@karan 吗?
    • 作为未来的参考@karan,请注意,更改问题并不容易。它会使某些答案无效,并且看起来他们没有正确回答问题
    【解决方案2】:
    df['Dup'] = df.ID.duplicated(keep=False).map({True: 'dup', False: 'single'})
    
    df
      Obs.   ID Name     Dup
    0   1)  123  abc     dup
    1   2)  123  abc     dup
    2   3)  145  abc  single
    3   4)  156  abc     dup
    4   5)  156  abc     dup
    

    【讨论】:

    • 你能告诉我当 ID 不重复时如何在 TYPE 列中分配 Name 变量的值(即如果 type=single 然后 type=abc)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2020-02-10
    • 2022-11-13
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多