0

「名前」列の一意の文字列に基づいて個々のファイルに解析したいデータフレームがあります。次のような単純な関数でこれを行うことができます。

f= lambda x: x.to_excel(os.getcwd()+'\\{}.xlsx'.format(x.name), index= False)
df.groupby('names').apply(f) 

これらのファイルを条件付き書式で書き出すことに注意してください。次のブロックで ExcelWriter を使用して、目的の書式設定を実現できました。

writer= pd.ExcelWriter('Test.xlsx', engine='xlsxwriter' )
df.to_excel(writer, sheet_name='Sheet1', index=False)
workbook= writer.book
worksheet= writer.sheets['Sheet1']
format1= workbook.add_format({'font_color':'#ec5a24'})
format2= workbook.add_format({'bg_color':'#4b4b4b','font_color':'#ffde00'})
format3= workbook.add_format({'font_color':'#86b05b'})
worksheet.conditional_format('A2:AM10000',{'type':'formula','criteria':'=INDIRECT("E"&ROW())= "High"', 'format':format1})
worksheet.conditional_format('A2:AM10000',{'type':'formula','criteria':'=INDIRECT("E"&ROW())= "Med"', 'format':format2})
worksheet.conditional_format('A2:AM10000',{'type':'formula','criteria':'=INDIRECT("E"&ROW())= "Normal"', 'format':format3})
workbook.close()
writer.save()

これら 2 つを組み合わせて、出力が Excel ファイルに必要な条件付き書式を持つ多くのファイル (列名の一意の名前ごとに 1 つ) になるようにする方法はありますか?

リクエストごとの新しいコード:

def new_func():
    f= lambda x: x.to_excel(os.getcwd()+'\\{}.xlsx'.format(x.name), index= False)
    writer= pd.ExcelWriter(x.name, engine='xlsxwriter' )
    df.to_excel(writer, sheet_name='Sheet1', index=False)
    workbook= writer.book
    worksheet= writer.sheets['Sheet1']
    format1= workbook.add_format({'font_color':'#ec5a24'})
    format2= workbook.add_format({'bg_color':'#4b4b4b','font_color':'#ffde00'})
    format3= workbook.add_format({'font_color':'#86b05b'})
    worksheet.conditional_format('A2:AM10000',{'type':'formula','criteria':'=INDIRECT("E"&ROW())= "High"', 'format':format1})
    worksheet.conditional_format('A2:AM10000',{'type':'formula','criteria':'=INDIRECT("E"&ROW())= "Med"', 'format':format2})
    worksheet.conditional_format('A2:AM10000',{'type':'formula','criteria':'=INDIRECT("E"&ROW())= "Low"', 'format':format3})
    workbook.close()
    writer.save()
df.groupby('names').apply(new_func())
4

2 に答える 2

0

ジョハサンの多くの助けを借りて、私のために働いた解決策は次のとおりです(ヘッダー形式も追加しました)。

def new_func(x):
        writer= pd.ExcelWriter(os.getcwd()+'\\{}.xlsx'.format(x.name), engine='xlsxwriter' )
        x.to_excel(writer, sheet_name='Sheet1', index=False)
        workbook= writer.book
        worksheet= writer.sheets['Sheet1']
        format1= workbook.add_format({'font_color':'#ec5a24'})
        format2= workbook.add_format({'bg_color':'#4b4b4b','font_color':'#ffde00'})
        format3= workbook.add_format({'font_color':'#86b05b'})
        header= workbook.add_format({'font_size':14, 'bold': True, 'font_color':'#3582c0'})
        worksheet.conditional_format('A2:AM10000',{'type':'formula','criteria':'=INDIRECT("E"&ROW())= "High"', 'format':format1})
        worksheet.conditional_format('A2:AM10000',{'type':'formula','criteria':'=INDIRECT("E"&ROW())= "Med"', 'format':format2})
        worksheet.conditional_format('A2:AM10000',{'type':'formula','criteria':'=INDIRECT("E"&ROW())= "Low"', 'format':format3})
        pandas.io.formats.excel.ExcelFormatter.header_style = None
        worksheet.set_row(0, None, header)
        workbook.close()
        writer.save()
    
       
df.groupby('name').apply(new_func)
于 2021-02-17T16:32:41.510 に答える