#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()
Как я мог бы достичь этого на основе приведенного выше кода? Искренняя благодарность.