消除字典Python中的重复项

问题描述 投票:0回答:3

我有一个由制表符分隔的csv文件:

enter image description here

我只需要关注两个第一列并找到,例如,如果对A-B再次出现在文档中作为B-A,如果出现B-A则打印A-B。其他对的情况相同。

对于提出的示例,输出为:·A-B和C-D

    dic ={}
    import sys
    import os
    import pandas as pd
    import numpy as np
    import csv

    colnames = ['col1', 'col2', 'col3', 'col4', 'col5']

    data = pd.read_csv('koko.csv', names=colnames, delimiter='\t')

    col1 = data.col1.tolist()
    col2 = data.col2.tolist()

    dataset = list(zip(col1,col2))
    for a,b in dataset:
        if (a,b) and (b,a) in dataset:
        dic [a] = b
print (dic)

output = {'A': 'B', 'B': 'A', 'D': 'C', 'C':'D'}

如何避免字典中的重复(或交换)结果?

python list pandas csv dictionary
3个回答
0
投票

这有用吗?:

import pandas as pd
import numpy as np

col_1 = ['A', 'B', 'C', 'B', 'D']
col_2 = ['B', 'C', 'D', 'A', 'C']

df = pd.DataFrame(np.column_stack([col_1,col_2]), columns = ['Col1', 'Col2'])

df['combined'] = list(zip(df['Col1'], df['Col2']))

final_set = set(tuple(sorted(t)) for t in df['combined'])

final_set看起来像这样:

 {('C', 'D'), ('A', 'B'), ('B', 'C')}

由于具有B-C的第二行,输出包含多于A-B和C-D


0
投票

以下应该工作,

使用示例df:

df = pd.DataFrame({'Col1' : ['A','C','D','B','D','A'], 'Col2' : ['B','D','C','A','C','B']})

这是我使用的功能:

 temp = df[['Col1','Col2']].apply(lambda row: sorted(row), axis = 1)
 print(temp[['Col1','Col2']].drop_duplicates())

有用的链接:

checking if a string is in alphabetical order in python

Difference between map, applymap and apply methods in Pandas


0
投票

这是一种方式。

df = pd.DataFrame({'Col1' : ['A','C','D','B','D','A','E'],
                   'Col2' : ['B','D','C','A','C','B','F']})

df = df.drop_duplicates()\
       .apply(sorted, axis=1)\
       .loc[df.duplicated(subset=['Col1', 'Col2'], keep=False)]\
       .drop_duplicates()

#   Col1 Col2
# 0    A    B
# 1    C    D

说明

步骤是:

  1. 删除重复的行。
  2. 按行对数据进行排序。
  3. 通过仅保留重复项来删除唯一行。
  4. 再次删除重复的行。
© www.soinside.com 2019 - 2024. All rights reserved.