Saya memiliki Python Dataframe yang ingin saya tulis ke dua file Excel yang masing-masing memiliki tiga lembar. Ada lima kolom, dua yang pertama di ketiga lembar dan tiga yang terakhir diputar melalui tiga lembar. File Excel didasarkan pada nilai kolom pertama. Jadi setiap file akan memiliki tiga lembar yang sama (dengan nilai yang berbeda, tentu saja).

Saya memiliki kode untuk meletakkan kolom yang berbeda ke lembar yang berbeda dari satu file Excel. Dan saya memiliki kode untuk membuat beberapa file Excel berdasarkan nilai kolom. Saya tidak dapat menemukan pendekatan untuk menggabungkan kedua teknik ini untuk membuat beberapa file Excel masing-masing dengan beberapa lembar.

Contoh kerangka data:

df = pd.DataFrame({'School': ['School1', 'School1', 'School2', 'School2'], 
                   'Sex': ['M', 'M', 'F', 'F'],
                   'Q1' : ['Black', 'Black', 'White', 'White'],
                   'Q2' : ['Good', 'Good', 'Bad', 'Bad'],
                   'Q3' : ['Up', 'Up', 'Down', 'Down']})

Kode ini akan membuat file Excel yang berbeda berdasarkan kolom Sekolah:

output = df[['School','Sex','Q1']].groupby('School')
output.apply(lambda x: x.to_excel('School' + str(x.name) + '.xlsx'))

Kode ini akan menempatkan kolom yang berbeda pada lembar yang berbeda dari satu file Excel:

writer = pd.ExcelWriter('school_tabs.xlsx', engine='xlsxwriter')
df[['School','Sex','Q1']].to_excel(writer, sheet_name='Q1')
df[['School','Sex','Q2']].to_excel(writer, sheet_name='Q2')
df[['School','Sex','Q3']].to_excel(writer, sheet_name='Q3')
writer.save()

Output yang diinginkan akan menjadi:

File excel 1

(sheet 1):
School    Sex  Q1
School 1  M    Black
School 1  M    Black

(sheet 2):
School    Sex  Q2
School 1  M    Good
School 1  M    Good

(sheet 3):
School    Sex  Q3
School 1  M    Up
School 1  M    Up

File excel 2

(sheet 1):
School    Sex  Q1
School 2  F    White
School 2  F    White

(sheet 2):
School    Sex  Q2
School 2  F    Bad
School 2  F    Bad

(sheet 3):
School    Sex  Q3
School 2  F    Down
School 2  F    Down
1
Paul 6 Agustus 2019, 00:23

1 menjawab

Jawaban Terbaik

IIUC, ulangi saja objek groupby Anda. Itu akan memungkinkan Anda untuk menangani setiap bingkai data secara terpisah.

Menggunakan baris kode Anda sendiri:

output = df[['School','Sex','Q1']].groupby('School')

for school, df_ in output:
    writer = pd.ExcelWriter(f'school_{school}_tabs.xlsx', engine='xlsxwriter')
    df_[['School','Sex','Q1']].to_excel(writer, sheet_name='Q1')
    df_[['School','Sex','Q2']].to_excel(writer, sheet_name='Q2')
    df_[['School','Sex','Q3']].to_excel(writer, sheet_name='Q3')
    writer.save()
3
rafaelc 5 Agustus 2019, 21:27