[英]How to Compare two columns of CSV simultaneously in Python?
我有一个 csv 文件,其中包含一个包含两列的巨大数据集。 我想比较这两列的数据,如果存在重复的对,则将其删除。 例如,如果我的数据文件看起来像这样:
Column A Column B
DIP-1N DIP-1N
DIP-2N DIP-3N
DIP-3N DIP-2N
DIP-4N DIP-5N
然后第一个条目被删除,因为我不想要两个“DIP-1N”。 此外,只要条目是唯一的,pair 的出现顺序就不是问题。 例如,这里 DIP-2N & DIP-3N 和 DIP-3N & DIP-3N 是配对的。 但两个条目的含义相同。 所以我想保留一个条目并删除其余条目。
我编写了以下代码,但我不知道如何同时比较两列的条目。
import csv
import pandas as pd
file = pd.read_csv("/home/staph.csv")
for i in range(len(file['Column A'])):
for j in range(len(file['Column B'])):
list1 = []
list2 = []
list1.append(file[file['Column A'].str.contains('DIP-'+str(i)+'N')])
list2.append(file[file['Column B'].str.contains('DIP-'+str(i)+'N')])
for ele1,ele2 in list1,list2:
if(list1[ele1]==list2[ele2]):
print("Duplicate")
else:
print("The 1st element is :", ele1)
print("The 2nd element is :", ele2)
好像出了点问题,因为没有输出。 程序结束,没有任何输出或错误。 就我的代码是否错误或我是否可以以更好的方式优化流程而言,任何帮助都将不胜感激。 谢谢 :)
这可能不是获得所需内容的最佳方式,但它确实有效。
df['temp'] = df['Column A'] + " " + df['Column B']
df['temp'] = df['temp'].str.split(" ")
df['temp'] = df['temp'].apply(lambda list_: " ".join(sorted(list_)))
df.drop_duplicates(subset=['temp'], inplace=True)
df = df[df['Column A'] != df['Column B']]
df.drop('temp', axis=1, inplace=True)
输出:
指数 | A栏 | B栏 |
---|---|---|
1 | DIP-2N | DIP-3N |
3 | DIP-4N | DIP-5N |
通过一些调整,您可以使用 pandas 方法:
# get indices of duplicate-free (except first occurence) combined sets of col A and B
keep_ind = pd.Series(df[["Column A", "Column B"]].values.tolist()).apply(set).drop_duplicates(keep="first").index
# use these indices to filter the DataFrame
df = df.loc[keep_ind]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.