数据处理—添加一个累计销量字段

在mysql中有一个以下字段内容的数据表data,现在希望能够增加一个字段“本期止累计”作为当月累计销量的记录,比如2月份的本期止累计是1-2月份销量的合计,3月份的本期止累计是1-3月份销量的合计,本文通过Python和SQL两种方法来实现:

Python方法:

Python方法主要是通过pandas读取mysql中的数据再处理实现:

import pandas as pd
from sqlalchemy import create_engine

engine=create_engine('mysql+pymysql://账户:密码@数据库IP')
sql = "'select * from data;'" 
df1=pd.read_sql_query(sql, engine)#从mysql获取数据df1
def def1(x):
    dfn=df1.loc[(df1['年份']==x['年份'])&(df1['月份']<=x['月份'])&(df1['企业']==x['企业'])]
    return dfn['销量'].sum()   #定义函数def1 计算销量合计
df1['本期止累计']=df1.apply(def1,axis = 1)
df1.to_excel('结果.xlsx')

 SQL方法:

SQL方法则相对简单一些

SELECT
	*,(
	SELECT
		SUM(本月销量) 
	FROM
		data T 
	WHERE
		T.年份 = A.年份 
		AND T.月份 <= A.月份 
		AND T.企业 = A.企业
	) 本期止累计 
FROM
	data A

不过以上两种方法必须保证是企业、年份、月份三个字段组合的唯一性,比如企业1有两条2011年1月份的销量记录,就会出现问题,在处理之前进行聚合来保证企业、年份、月份三个字段组合的唯一性。

Python可以采用

df1=df1.groupby(['年份','月份','企业']).agg(sum)

SQL 可以采用

WITH data1 as (select 年份,月份,企业,sum(销量) 销量 from data)

对数据进行聚合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值