python - 删除 pandas where 中的 "duplicate rows"并附加条件

标签 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 示例中,它按预期工作。

最佳答案

您可以将 m1 中每个 ech 文件的测试欺骗与没有最后一列的测试欺骗结合起来,使用 | 进行按位 OR~ 反转掩码:

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

df = df[m1 | ~m2]

示例:

df = pd.DataFrame({
         'a':[4,5,4,5,4,6],
         'b':[7,8,7,4,7,8],
         'file_identifier':list('aaabbb')
})
print (df)
   a  b file_identifier
0  4  7               a
1  5  8               a
2  4  7               a
3  5  4               b
4  4  7               b <- dupe with different filename
5  6  8               b

m1 = df.duplicated()
#print (m1)

m2 = df.duplicated(subset=df.columns[:-1])
#print (m2)

df = df[m1 | ~m2]
print (df)
   a  b file_identifier
0  4  7               a
1  5  8               a
2  4  7               a
3  5  4               b
5  6  8               b

关于python - 删除 pandas where 中的 "duplicate rows"并附加条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59559718/

相关文章:

python - Dask 和 fbprophet

python - 在 Python Pandas 中,有没有办法在一行中多行并排?保持秩序

javascript - 如果 json 属性值重复,则比较其另一个数字属性并设置属性bigerDuplicate

jdbc - docker input jdbc 插件中的 Logstash 未获取新行

mysql - 查询选择记录忽略重复项

python - 如何在 networkx 中找到一个图的所有连接子图?

python - 如何组织 Eclipse - Workspace VS 编程语言

python - 在大文件上使用 pandas dataframe 时找到预期字符串、int

python - 如何找到字符串中字母(来自字母表)第一次出现的位置?

python - 跟踪 Dataframe 中的操作