用python将新建的df按两列分组,两个列名分别为表名和sheeet名,把分组后的df按顺序输出到已有excel中的倒数第二个sheet,表头填充为浅蓝色,全表加边框
时间: 2024-05-12 08:17:09 浏览: 128
您好,可以使用 pandas 中的 groupby 函数来按照两个指定列进行分组,然后将分组后的数据写入已有的 Excel 中。具体操作可以按照下面的代码实现:
```python
import pandas as pd
import openpyxl
from openpyxl.styles import Color, Font, Border, Side
from openpyxl.utils import get_column_letter
# 读取已有的 Excel 文件
book = openpyxl.load_workbook('example.xlsx')
writer = pd.ExcelWriter('example.xlsx', engine='openpyxl')
writer.book = book
# 准备数据
df = pd.DataFrame({'表名': ['表1', '表1', '表2', '表2'],
'sheet名': ['sheet1', 'sheet1', 'sheet2', 'sheet2'],
'数据': [1, 2, 3, 4]})
# 按照表名和sheet名进行分组
groups = df.groupby(['表名', 'sheet名'])
# 将分组后的数据写入 Excel 文件中的倒数第二个 sheet
sheet_name = writer.book.sheetnames[-2]
for i, (name, group) in enumerate(groups):
group.to_excel(writer, sheet_name=sheet_name, startrow=i*len(group.columns)+1, header=False, index=False)
# 给表头加上浅蓝色填充和边框
worksheet = writer.sheets[sheet_name]
header_row = i*len(group.columns)+1
side = Side(border_style='thin', color='000000')
for j, col in enumerate(group.columns):
cell = worksheet.cell(row=header_row, column=j+1)
cell.value = col
cell.fill = openpyxl.styles.fills.PatternFill(patternType='solid', fgColor=Color(rgb='BEEEFF'))
cell.border = Border(top=side, bottom=side, left=side, right=side)
# 保存 Excel 文件
writer.save()
```
在这个例子中,我们首先读取了一个已有的 Excel 文件,并且准备好了一个 DataFrame,其中包含了表名、sheet名和数据列。然后,我们使用 pandas 中的 groupby 函数按照表名和sheet名进行分组。接着,我们将分组后的数据写入已有的 Excel 文件中的倒数第二个 sheet,并且给表头加上了浅蓝色填充和边框。最后,我们保存 Excel 文件并退出。
注意,这个例子中我们使用了 openpyxl 库来对 Excel 文件进行读写操作,并且使用了 openpyxl 中的一些 API 来设置单元格的样式。如果您还没有安装 openpyxl 库,可以使用 pip 命令进行安装:
```bash
pip install openpyxl
```
阅读全文