gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 00:12:17 25 4
gpt4 key购买 nike

在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com