Объедините множество файлов Excel в один с несколькими листами на основе условий с использованием Python

#python-3.x #pandas #dataframe #numpy

#python-3.x #панды #фрейм данных #тупица

Вопрос:

Предполагая, что у меня есть data фрейм данных следующим образом:

 code indicate_date type 0 000010.ST 2006-10-10 industry 1 000001.ST 2004-10-10 industry 2 000629.ST 2018-8-27 industry 3 000655.ST 2007-7-3 industry 4 002221.ST 2008-3-14 service 5 002250.ST 2008-6-27 service 6 002258.ST 2008-7-16 service  

и в одном каталоге у меня есть много файлов excel с содержимым как таковым:

000010.ST.xlsx:

 date code value 0 2006-3-31 000010.ST 1.141990e 07 1 2006-6-30 000010.ST 5.129218e 07 2 2006-9-30 000010.ST NaN 3 2006-12-31 000010.ST 1.050415e 08 4 2007-3-31 000010.ST 1.399396e 07 5 2007-6-30 000010.ST 4.121134e 07 6 2007-9-30 000010.ST NaN  

000001.ST.xlsx:

 date code value 0 2005-12-31 000001.ST 5.450551e 09 1 2006-3-31 000001.ST 1.596767e 09 2 2006-6-30 000001.ST NaN 3 2006-9-30 000001.ST NaN 4 2006-12-31 000001.ST 7.135218e 09 5 2007-3-31 000001.ST 2.352129e 09 6 2007-6-30 000001.ST 4.890715e 09 7 2007-9-30 000001.ST 7.767194e 09 8 2007-12-31 000001.ST 1.080750e 10  

002221.ST.xlsx:

 date code value 0 2007-12-31 002221.ST 1.297900e 08 1 2008-3-31 002221.ST 1.817627e 07 2 2008-6-30 002221.ST 4.523745e 07 3 2008-9-30 002221.ST 7.342508e 07 4 2008-12-31 002221.ST 1.202159e 08  

Мне нужно объединить эти файлы Excel в зависимости от условий: 1) для каждого файла Excel, мне нужно сравнить его минимальной date С indicate_date , если ее минимальное значение, date меньше indicate_date в data , то эти файлы будут сцепления; в противном случае он будет проигнорирован, в то время как сцепление; т. е., 000001.ST.xlsx будет игнорироваться, когда я сцепить с industry листа, так как его минимальный срок 2005-12-31 составляет более 2004-10-10 ; 2) для Excel файлов одинаково type , они будут объединены на одном листе по имени ПО type от data .

Мой пробный код:

Чтобы зациклить файлы Excel и получить имя файлов:

 files = glob.glob('./*.xlsx') for file in files:  df = pd.read_excel(file)  head, tail = os.path.split(file)  file_name = tail.rsplit('.', 1)[0]  print(file_name)  

Out:

 000010.ST 000001.ST 002221.ST ...  

To groupby type and read excel files:

 for type, df in data.groupby('type'):  df.index = df.code  print(type, df)  for index, row in df.iterrows():  print(index)  code_df = pd.read_excel(f"./{index}.xlsx", index_col=0)  

To save multiple sheets into one excel file:

 import pandas as pd writer = pd.ExcelWriter('output.xlsx', engine='xlsxwriter') frames = {'sheetName_1': dataframe1, 'sheetName_2': dataframe2,  'sheetName_3': dataframe3} for sheet, frame in frames.items():  frame.to_excel(writer, sheet_name = sheet) writer.save()  

Как я мог бы достичь этого на основе приведенного выше кода? Искренняя благодарность.