【问题标题】:Python Pandas differing value_counts() in two columns of same len()Python Pandas 在相同 len() 的两列中不同 value_counts()
【发布时间】:2017-05-18 19:09:58
【问题描述】:

我有一个 pandas 数据框,它包含两列,跟踪号 [col_1] 和 ID 号 [col_2]。跟踪号可以重复,ID 号也可以重复 - 但是,每个跟踪和 ID 应该只对应相邻列中的特定人员。

我的两列都是一样长,但是唯一值计数不同,应该是一样的,如下图:

in[1]:  Trace | ID
        1     | 5054
        2     | 8291
        3     | 9323
        4     | 9323
        ...   |
        100   | 8928

in[2]:  print('unique traces: ', df['Trace'].value_counts())
        print('unique IDs: ', df['ID'].value_counts())

out[3]: unique traces: 100
        unique IDs: 99

在上面的代码中,相同的 ID 号 (9232) 由两个跟踪号 (3 和 4) 表示 - 我如何隔离这些事件?感谢收看!

【问题讨论】:

  • 我是否正确,您想查找重复项?如果是这样,你想要行号还是重复的ID
  • @MSeifert - 首选行号。谢谢!

标签: python python-3.x pandas dataframe


【解决方案1】:

通过使用duplicated() 函数(docs),您可以执行以下操作:

df[df['ID'].duplicated(keep=False)]

通过将keep 设置为False,我们可以获得所有重复项(而不是排除第一个或最后一个)。

返回:

Trace   ID
2   3   9323
3   4   9323

【讨论】:

  • @ScottBoston 但这只会检查重复项。 OP 要求每个 ID 组的 Trace 唯一元素的数量。这将返回具有相同跟踪的相同 ID,但您的不会。我不认为这是正确的。
【解决方案2】:

您可以使用groupbyfilter

df.groupby('ID').filter(lambda x: x.Trace.nunique() > 1)

输出:

  Trace      ID
2     3  9323.0
3     4  9323.0

【讨论】:

    【解决方案3】:
    #this should tell you the index of Non-unique Trace or IDs.
    
    df.groupby('ID').filter(lambda x: len(x)>1)
    Out[85]: 
       Trace    ID
    2      3  9323
    3      4  9323
    
    df.groupby('Trace').filter(lambda x: len(x)>1)
    Out[86]: 
    Empty DataFrame
    Columns: [Trace, ID]
    Index: []
    

    【讨论】:

    • 这只是返回一个 df,其中有两个以上的跟踪号实例 - 不是在哪里,假设有两个相同的跟踪号实例,而是两个 [或更多] 不同的 ID相同的跟踪号
    • 第一个 groupby 检查重复的 ID,第二个检查重复的 Trace。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多