用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存

财务小妹

萝卜哥,求助!

用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存_02

人有三急,回见~

用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存_02用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存_04

萝卜


用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存

财务小妹

别啊,不能去!

用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存_02

这,到底啥事啊

用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存_02用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存_04

萝卜

用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存

财务小妹

有一个超级繁琐的事情,不过感觉你和Python能帮我

用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存_02

那你学Python吧,毕竟我也不能帮你一辈子

用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存_02用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存_04

萝卜

用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存

财务小妹

不一定哦,先帮我把这次搞定,也许能一辈子呢

用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存_02

当真?我来看看

用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存_02用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存_16

萝卜

财务小妹的需求


有一个Excel数据,需要根据一定规则重新组合数据,并把不同的数据发给不同的人


原始数据:


用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存_17


目的数据:


用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存_18



每一个tab页的数据,直接发给对应的人即可!


对于上面的数据格式转化,我们可以很自然的想到使用透视表,pivot table


然后为了达到更好的效果,我们还使用了 Pandas 当中的 DataFrame.xs 函数


先来进行透视表转换








df = pd.read_excel("sales-funnel.xlsx")
table = pd.pivot_table(df,index=["Manager","Rep","Product"],
values=["Price","Quantity"],
aggfunc=[np.sum,np.mean],fill_value=0)
 table

用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存_19


接下来应用 xs



table.xs('Debra Henley', level=0)

用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据_20


可以看到很轻松的就拿到了 Debra Henley 对应的数据


我们还可以继续向下钻取数据



table.xs(('Debra Henley','Craig Booker'), level=0)

用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_python_21


接下来我们还需要用到 get_level_values 函数




table.index.get_level_values(0)
table.index.get_level_values(1)
table.index.get_level_values(0).unique()

Output:


Index(['Debra Henley', 'Debra Henley', 'Debra Henley', 'Debra Henley',
'Debra Henley', 'Debra Henley', 'Debra Henley', 'Fred Anderson',
'Fred Anderson', 'Fred Anderson', 'Fred Anderson', 'Fred Anderson',
'Fred Anderson'],
      dtype='object'name='Manager')


Index(['Craig Booker', 'Craig Booker', 'Craig Booker', 'Daniel Hilton',
'Daniel Hilton', 'John Smith', 'John Smith', 'Cedric Moss',
'Cedric Moss', 'Cedric Moss', 'Wendy Yule', 'Wendy Yule', 'Wendy Yule'],
dtype='object', name='Rep')


Index(['Debra Henley', 'Fred Anderson'], dtype='object', name='Manager')


下面我们就可以写一个循环,依次获取到 manager 所需要的数据





for manager in table.index.get_level_values(0).unique():
print(table.xs(manager, level=0))

用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存_22


最后把数据保存到新的 Excel 当中



writer = pd.ExcelWriter('output.xlsx')


for manager in table.index.get_level_values(0).unique():
temp_df = table.xs(manager, level=0)
temp_df.to_excel(writer,manager)


writer.save()


由于上述操作都是在 Jupyter Notebook 当中进行的,下面我们把相关代码封装下,通过命令行来执行



if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Script to generate sales report')
parser.add_argument('infile', type=argparse.FileType('r'),
help="report source file in Excel")
parser.add_argument('outfile', type=argparse.FileType('w'),
help="output file in Excel")
args = parser.parse_args()
# We need to pass the full file name instead of the file object
sales_report = create_pivot(args.infile.name)
save_report(sales_report, args.outfile.name)


至此,上述需求全部完成!


用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存

财务小妹

哇,好棒哦~

用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存_02

嘿嘿,一般一般

用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存_02用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存_16

萝卜


用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存

财务小妹

嗯嗯,那我先下班喽

用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存_02

好呀,话说咱们什么时候说说一辈子的事情

用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存_02用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存_16

萝卜


用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存

财务小妹

没问题啊,咱们要做一辈子的同事

用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存_02

。。。

用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_数据保存_02用 Python 帮财务小妹生成 Excel 报表,小妹直说一辈子。。。_python_34

萝卜


好了,今天就到这里了,为了帮忙抚平萝卜哥受伤的小心灵,点个再走吧