Использование цикла Python для создания нескольких листов Excel в одной книге Excel из одного кадра данных - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть кадр данных, как показано ниже:

user = pd.DataFrame({'User':['101','101','101','102','102','101','101','102','102','102'],'Country':['India','Japan','India','Brazil','Japan','UK','Austria','Japan','Singapore','UK'],'Count':[50,1,2,5,6,89,10.9,10,5,6]})

Мой желаемый результат - иметь несколько листов Excel для каждого «пользователя» в одной книге Excel из цикла данных выше, используя цикл. Например:

Пользователь 101 будет находиться на листе с именем «101», а пользователь 102 на листе с именем «102» внутри той же самой рабочей книги.

Я попытался выполнить цикл, используя приведенный ниже код, но этотолько цикл первого пользователя, 101.

for user in user['User'].unique():
    path = r"C:\Users\Desktop\df_user.xlsx"
    writer = pd.ExcelWriter(path, engine = 'xlsxwriter')
    user[user['User'] == user].to_excel(writer, sheet_name = f"{user}")
    writer.save()
    writer.close() 

1 Ответ

0 голосов
/ 30 сентября 2019

Цикл по groupby объекту и сохранение в том же файле Excel:

with pd.ExcelWriter('output.xlsx') as writer:
    for i, g in user.groupby('User'):
        g.to_excel(writer, sheet_name=i, index=False)

При необходимости удалите столбец User:

with pd.ExcelWriter('output.xlsx') as writer:
    for i, g in user.groupby('User'):
        g.drop('User', axis=1).to_excel(writer, sheet_name=i, index=False)

В вашем решении необходимо изменить *От 1009 * до for u in user['User'].unique(), чтобы избежать перезаписи переменной DataFrame user, также определите, что writer лучше не использовать, чтобы избежать перезаписи файла Excel:

path = "df_user.xlsx"
writer = pd.ExcelWriter(path, engine = 'xlsxwriter')
for u in user['User'].unique():
    user[user['User'] == u].to_excel(writer, sheet_name = f"{u}", index=False)
writer.save()
writer.close() 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...