删除带有附加条件的熊猫中的“重复行”

时间:2020-01-02 07:24:38

标签: python pandas duplicates

借助Jezrael,我可以编辑python脚本:

import os
import glob
import pandas as pd
os.chdir("files")

extension = 'csv'
all_filenames = [i for i in glob.glob('*.{}'.format(extension))]

# combine all files in the folder
dfs_to_concat = []
for f in all_filenames:
    df = pd.read_csv(f, sep=";")
    df['file_identifier'] = [f] * len(df.index)
    dfs_to_concat.append(df)
combined_csv = pd.concat(dfs_to_concat)

# remove duplicates
m1 = combined_csv.duplicated()
m2 = combined_csv.duplicated(subset=combined_csv.columns[:-1])

combined_csv_final = combined_csv[m1 | ~m2]

# export to csv
combined_csv_final.to_csv("combined_csv_final.csv", index=False, sep=";", encoding='utf-8-sig')

此脚本应该执行的操作是:

仅删除“ file_identifier”不同的所有重复行。不要删除“ file_identifier”相同的重复项。

但是,它不起作用。它不会删除具有不同文件标识符的重复行。实际上,它不会删除任何重复的行。

有人知道哪里出了问题吗?显然,在Jezraels示例中,它可以按预期工作。

1 个答案:

答案 0 :(得分:2)

您可以将m1中每个ech文件的测试重复项与没有最后一列的测试重复项结合起来,其中|的{​​{1}}和bitwise OR的反转掩码:

~

示例

m1 = combined_csv.duplicated()
m2 = combined_csv.duplicated(subset=combined_csv.columns[:-1])

df = df[m1 | ~m2]