繁体   English   中英

如何将一列的每一行与 python 中大型数据集的同一列的所有其他行进行比较?

[英]How to compare each row of a column to all the other row of the same column of a large dataset in python?

我有一个 dataframe,它有两列 - unique_id 和 id_string。dataframe 看起来像:

| unique_id| id_string |
| -------- | --------- |
| 123      | abc       |
| 456      | pqr       |
| 789      | xyz       |
| 000      | lmn       |

我想将每个 unique_id 的 id_string 与该列的所有其他 id_string 进行比较。 我希望 output 如下表所示:

| unique_id| id_string | duplicate_id|duplicate_string|score|
| -------- | --------- |-------------|----------------|-----|
| 123      | abc       |456          |pqr             |91   |
| 123      | abc       |789          |xyz             |92   |
| 123      | abc       |000          |lmn             |93   |

我已经使用下面的 for 循环编写了代码:

out_put_df = pd.DataFrame()
for i in   input_df.index:
    unique_id = input_df.at[i, 'unique_id']
    id_string = input_df.at[i, 'id_string']
    j = i+1
    for j in range(len(input_df.index)-j):
        dupicate_id = input_df.at[j, 'unique_id']
        duplicate_string = input_df.at[j, 'id_string']
        comparition_score = fuzz.token_set_ratio(id_string, duplicate_string)
        out_put_df = out_put_df.append(pd.DataFrame({'unique_id': unique_id,'id_string': id_string,'dupicate_id': dupicate_id,'duplicate_string': duplicate_string,'comparition_score': comparition_score}, index=[0]), ignore_index=True)
    

原来的 dataframe 有 50 万行,所以它需要无限的时间。 有人可以告诉我这样做的最佳方法吗? 我开始了解它 itertools.combinations,但我也无法使用它。

提前致谢。

你应该使用排序。 id_string列排序并遍历所有行 - 只要id_string列中的下一个值等于当前值 - 你就有一个重复项。 您还可以使用id_string的最后一个值回顾(这可能更容易):

input_df = pd.DataFrame()
prev_id_string = None  # or some other invalid value that does not exist in your df
prev_unique_id = None
rows = []
for _, (unique_id, id_string) in input_df.sort_values(by=['id_string', 'unique_id']).iterrows():
    if prev_id_string == id_string:
        score = # calculate it as you wish
        row.append((prev_unique_id, prev_id_string, unique_id, score))

    prev_unique_id = unique_id    

out_put_df = pd.DataFrame(columns="unique_id, id_string, duplicate_id, duplicate_string, score".split(", "), data=rows)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM