微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 使用pandas对组进行分组和比较

我的数据看起来像:

Identifier  Category1 Category2 Category3 Category4 Category5
1000           foo      bat       678         a.x       ld
1000           foo      bat       78          l.o       op
1000           coo      cat       678         p.o       kt
1001           coo      sat       89          a.x       hd
1001           foo      bat       78          l.o       op
1002           foo      bat       678         a.x       ld
1002           foo      bat       78          l.o       op
1002           coo      cat       678         p.o       kt

我想要做的是比较1000到1001和1002,依此类推.我希望代码给出的输出是:1000与1002相同.因此,我想要使用的方法是:

>首先将所有标识符项分组到单独的数据帧中(可能?).例如,df1将是属于标识符1000的所有行,df2将是属于标识符1002的所有行.(**请注意,我希望代码自己执行此操作,因为有数百万行,而不是我编写代码手动比较标识符**).我尝试过使用pandas的groupby功能,它可以很好地进行分组,但后来我不知道如何比较这些组.
>比较每个组/子数据帧.

我想到的一种方法是将特定标识符的每一行读入数组/向量,并使用比较度量(曼哈顿距离,余弦相似性等)比较数组/向量.

感谢任何帮助,我是Python的新手.提前致谢!

解决方法:

您可以执行以下操作:

import pandas as pd

input_file = pd.read_csv("input.csv")
columns = ['Category1','Category2','Category3','Category4','Category5']

duplicate_entries = {}

for group in input_file.groupby('Identifier'):
    # transforming to tuples so that it can be used as keys on a dict
    lines = [tuple(y) for y in group[1].loc[:,columns].values.tolist()]    
    key = tuple(lines) 

    if key not in duplicate_entries:
        duplicate_entries[key] = []

    duplicate_entries[key].append(group[0])

然后,duplicate_entries值将包含重复标识符的列表

duplicate_entries.values()
> [[1000, 1002], [1001]]

编辑:

要仅获取具有重复项的条目,您可以使用以下内容

all_dup = [dup for dup in duplicate_entries if len(dup) > 1]

解释索引(抱歉,我之前没有解释过):迭代df.groupby结果给出一个元组,其中第一个条目是组的键(在这种情况下,它将是’标识符’),第二个条目是是一系列分组的数据帧.因此,要获取包含重复条目的行,我们将使用[1]并在[0]处找到该组的“标识符”.因为在duplicate_entries数组中我们想要该条目的标识符,所以使用group [0]会得到我们的信息.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐