根据流水,按月统计销售采购。excel,python

原始表格:流水

img

生成表格:销售1-统计每个月的销量

img


销售2-按客户统计每个月的销量

img

采购统计-统计每个月的采购量

img

安装依赖

pip install numpy pandas openpyxl xlrd

销售

# coding=utf-8
import os

import numpy
import pandas as pd

df = pd.DataFrame(pd.read_excel('/Users/zhangyz/Desktop/海/流水.xls', header=1))
df = df.dropna(subset=['单据日期', '出库数量'])
df['单据日期'] = pd.to_datetime(df['单据日期'], format='%Y-%m-%d %H:%M:%S')
df['Month'] = df['单据日期'].dt.month
df = df.groupby(['商品编码', '商品名称', '商品规格', '单位', '生产企业', '批号', 'Month'], as_index=False).agg({'出库数量': 'sum'})
groupByColumns = ['商品编码', '商品名称', '商品规格', '单位', '生产企业', '批号']
df = pd.pivot(data=df,
              index=groupByColumns,
              columns='Month',
              values=['出库数量'])
headers = []
headers.extend(df.axes[0].names)
for i in df.axes[-1].levels[1].values:
    headers.append(str(i) + '月')
temp_xlsx = 'temp.xlsx'
df.to_excel(temp_xlsx, sheet_name='bluewhale_cc', header=False)
df = pd.DataFrame(pd.read_excel(temp_xlsx))
for i in range(0, len(groupByColumns)):
    df['Unnamed: ' + str(i)].ffill(inplace=True)
df.to_excel('销售.xlsx', sheet_name='bluewhale_cc', header=headers, index=False)
os.remove(temp_xlsx)

客户销售

# coding=utf-8
import os

import numpy
import pandas as pd

df = pd.DataFrame(pd.read_excel('/Users/zhangyz/Desktop/海/流水.xls', header=1))
df = df.dropna(subset=['单据日期', '出库数量'])
df['单据日期'] = pd.to_datetime(df['单据日期'], format='%Y-%m-%d %H:%M:%S')
df['Month'] = df['单据日期'].dt.month
df = df.groupby(['商品编码', '商品名称', '商品规格', '单位', '生产企业', '批号', '客户名称', 'Month'], as_index=False).agg({'出库数量': 'sum'})
groupByColumns = ['商品编码', '商品名称', '商品规格', '单位', '生产企业', '批号', '客户名称']
df = pd.pivot(data=df,
              index=groupByColumns,
              columns='Month',
              values=['出库数量'])
headers = []
headers.extend(df.axes[0].names)
for i in df.axes[-1].levels[1].values:
    headers.append(str(i) + '月')
temp_xlsx = 'temp.xlsx'
df.to_excel(temp_xlsx, sheet_name='bluewhale_cc', header=False)
df = pd.DataFrame(pd.read_excel(temp_xlsx))
for i in range(0, len(groupByColumns)):
    df['Unnamed: ' + str(i)].ffill(inplace=True)
df.to_excel('客户销售.xlsx', sheet_name='bluewhale_cc', header=headers, index=False)
os.remove(temp_xlsx)

进货

# coding=utf-8
import os

import numpy
import pandas as pd

df = pd.DataFrame(pd.read_excel('/Users/zhangyz/Desktop/海/流水.xls', header=1))
df = df.dropna(subset=['单据日期', '入库数量'])
df['单据日期'] = pd.to_datetime(df['单据日期'], format='%Y-%m-%d %H:%M:%S')
df['Month'] = df['单据日期'].dt.month
df = df.groupby(['商品编码', '商品名称', '商品规格', '单位', '生产企业', '批号', 'Month'], as_index=False).agg({'入库数量': 'sum'})
groupByColumns = ['商品编码', '商品名称', '商品规格', '单位', '生产企业', '批号']
df = pd.pivot(data=df,
              index=groupByColumns,
              columns='Month',
              values=['入库数量'])
headers = []
headers.extend(df.axes[0].names)
for i in df.axes[-1].levels[1].values:
    headers.append(str(i) + '月')
temp_xlsx = 'temp.xlsx'
df.to_excel(temp_xlsx, sheet_name='bluewhale_cc', header=False)
df = pd.DataFrame(pd.read_excel(temp_xlsx))
for i in range(0, len(groupByColumns)):
    df['Unnamed: ' + str(i)].ffill(inplace=True)
df.to_excel('进货.xlsx', sheet_name='bluewhale_cc', header=headers, index=False)
os.remove(temp_xlsx)

入库那里都没有怎么算采购的

分组求和的思路就可以解决问题吧:
第一个统计每个月的销量,如果只是按月,直接根据单据日期分组就可以了,如果需要区分商品,那就再加个商品分组;
第二个按客户统计每个月的销量,直接按客户和日期分组就可以;
第三个统计每个月的采购量也是直接通过按月分组就可以得出来结果。

你这个最好表发出来 大家才能尝试

如果是对excel的处理的话,可以用python的pandas库进行处理。你这个需求代码不是几行能写完的,有需要学习的话可以给指导

EXCEL 中有sum函数,group by 也可以用透视表的形式实现。或者直接用EXCEL连接数据库,在编辑查询里也可以直接用SQL ~

用流水生成下面几个统计表的话,透视表就可以了