所以我一直在关注这个网站一段时间,以了解我的 Python 知识库。决定在我的第一个问题上深究,所以希望有人能够帮助我。
我目前有以下问题: 尝试将 Pandas Pivot 表打印到预定义的 excel 模板中,例如从单元格 C5
代码在下面,我通过 CSV 加载的表格也在那里
from openpyxl import Workbook
from openpyxl.compat import range
from openpyxl.utils import get_column_letter
from openpyxl import load_workbook
from openpyxl.styles import Alignment
from openpyxl.utils.dataframe import dataframe_to_rows
import pandas as pd
pnl_lst = pd.read_csv('data_test.csv', index_col=0)
pnl_lst = pd.DataFrame(pnl_lst, columns=['Fruit_Veg', 'Item', 'AmountSold','AmountRotten','#ofpickers'])
pnl_lst = pnl_lst.groupby('Fruit_Veg').apply(lambda x: x.pivot_table(index=['Item'],aggfunc='sum',margins=True,margins_name='Total'))
print(pnl_lst)
通过 data_test.csv 输入表
| Fruit_Veg | 物品 | 售出金额 | 金额烂 | #ofpickers | |
|---|---|---|---|---|---|
| 1 | 水果 | 苹果 | 0.907502 | 0.176108 | 0.365398 |
| 2 | 蔬菜 | 萝卜 | 0.707491 | 0.644805 | 0.375513 |
| 3 | 水果 | 梨 | 0.898554 | 0.724919 | 0.338557 |
| 4 | 水果 | 覆盆子 | 0.284849 | 0.023705 | 0.80169 |
| 5 | 蔬菜 | 土豆 | 0.205464 | 0.682219 | 0.834467 |
| 6 | 蔬菜 | 茄子 | 0.644248 | 0.531195 | 0.970782 |
生成的输出(表格变得奇怪,但第一列中的 Fruit 和 Veg 是合并的单元格):
| Fruit_Veg | 物品 | #ofpickers | 金额烂 | 售出金额 |
|---|---|---|---|---|
| 水果 | 苹果 | 0.365398283 | 0.176107564 | 0.907502485 |
| 梨 | 0.338556856 | 0.724919365 | 0.898554328 | |
| 覆盆子 | 0.801690277 | 0.02370525 | 0.284848945 | |
| 全部的 | 1.505645416 | 0.924732179 | 2.090905758 | |
| 蔬菜 | 茄子 | 0.970782439 | 0.531195328 | 0.644248183 |
| 萝卜 | 0.375513124 | 0.644804957 | 0.707491361 | |
| 土豆 | 0.834466661 | 0.682219111 | 0.20546385 | |
| 全部的 | 2.180762224 | 1.858219396 | 1.557203394 |
尝试过的想法(遗憾的是没有运气):
- 我可以使用 XlsxWriter 打印 pandas 数据透视表,但这是写入单独的 excel 文件,而不是我需要的模板;
- 使用 Openpyxl 将数据透视表写入 excel 模板,但没有运气,因为格式完全错误,它无法将数据透视表转换为模块随后写入的可读内容;
- 尝试使用 pandas GroupBy 函数复制我的数据透视表。根据上面的输出,我不太清楚如何让 Totals 出现在每个 Fruit_Veg 部分下。
有没有人有任何明智的想法?
非常感谢!