分组值并根据Pandas中的列删除分组的重复项

时间:2020-05-28 19:36:25

标签: python pandas dataframe grouping pandas-groupby

我有一个数据文件,该数据文件是合并包含名称信息的多个源的结果。每个名称都有一个唯一的ID(列ID)。 按ID对ID进行排序,我想删除Source列中的第二个/第三个Source。

我今天的输出:

(所有红色行都是“重复项”,因为我们已经从第一个来源获得了它们(蓝色行))

enter image description here

我想要实现的目标:

enter image description here

如何获得此结果? 有没有一种逐行迭代的方法,当我在代码的函数“ for file in files:”中进行迭代时,已经删除了ID的重复项吗? 还是在将数据帧输出到excel文件之前在“ df_merged”中执行此操作更容易?

代码:

import pandas as pd
import os
from datetime import datetime
from shutil import copyfile
from functools import reduce
import numpy as np



#Path
base_path = "G:/Till/"

# Def
def get_files(folder, filetype):
    list_files = []
    directory = os.fsencode(folder)
    for file in os.listdir(directory):
        filename = os.fsdecode(file)
        if filename.endswith("." + filetype.strip().lower()):
            list_files.append(filename)
    return list_files


# export files
df_result_e = pd.DataFrame()

files = get_files(base_path + "datasource/" + "export","xlsx")
df_append_e = pd.DataFrame()

for file in files:
    df_temp = pd.read_excel(base_path + "datasource/" + "export/" + file, "Results", dtype=str, index=False)
    df_temp["Source"] = file
    df_append_e = pd.concat([df_append_e, df_temp])


df_result_e = pd.concat([df_result_e, df_append_e])


print(df_result_e)


# match files
df_result_m = pd.DataFrame()

files = get_files(base_path + "datasource/" + "match","xlsx")
df_append_m = pd.DataFrame()

for file in files:
    df_temp = pd.read_excel(base_path + "datasource/" + "match/" + file, "Page 1", dtype=str, index=False)
    df_append_m = pd.concat([df_append_m, df_temp])

df_result_m = pd.concat([df_result_m, df_append_m])
df_result_m = df_result_m[['ID_Our','Name_Our','Ext ID']]
df_result_m.rename(columns={'ID_Our' : 'ID', 'Name_Our' : 'Name' , 'Ext ID' : 'Match ID'}, inplace=True)
df_result_m.dropna(subset=["Match ID"], inplace=True) # Drop all NA


data_frames = [df_result_e, df_result_m]

# Join files
df_merged = reduce(lambda  left,right: pd.merge(left, right, on=["Match ID"], how='outer'), data_frames)

#Output of files
df_merged.to_excel(base_path + "Total datasource Export/" +  datetime.now().strftime("%Y-%m-%d_%H%M") + ".xlsx", index=False)

1 个答案:

答案 0 :(得分:1)

要删除它们,您可以尝试将transformfactorize

newdf=df[df.groupby('ID')['Source'].transform(lambda x : x.factorize()[0])==0]