Python中pandas怎么实现分组去重统计和求和
毕业设计
1
sql实现逻辑:
select
大区,
count(distinct 用户编码) as 用户数,
count(distinct 订单编码) as 订单数,
sum(数量) as 数量,
sum(金额) as 金额
from order_table
group by 大区
我现在想到的是Python方法是分别计算,然后进行组合:
df1 = order_table.groupby('大区')['数量','金额'].sum()
df2 = order_table.groupby('大区')['用户编码','订单编码'].unique()
result = pd.merge( df1 , df2 ,how = 'left' ,on = '大区')
现在的问题Python有没有更简单的方法,直接用一个语句实现
-
import pandas as pd import pandasql as ps d = {'大区': ['河南大区', '河南大区', '河南大区', '河南大区', '河南大区', '河北大区', '河北大区', '河北大区'], '订单编码': ['O0001','O0001','O0002','O0002','O0002','O0003','O0004','O0005', ], '商品名称': ['g001','g002','g001', 'g002','g003','g004','g005','g005',], '数量': [2, 1, 3, 42, 5, 12, 3, 4], '用户编码': ['U0001', 'U0001', 'U0001', 'U0001', 'U0001', 'U0002','U0003','U0003', ], '金额': [200, 100, 300, 42000, 500, 1200, 300, 400], } df = pd.DataFrame(d) print(df) fun = lambda q: ps.sqldf(q, globals()) q = """select 大区, count(distinct 用户编码) as 用户数, count(distinct 订单编码) as 订单数, sum(数量) as 数量, sum(金额) as 金额 from df group by 大区 """ res = fun(q) print(res)
-
result = order_able.groupby('大区').agg({'数量': 'sum', '金额': 'sum', '用户编码': 'unique', '订单编码': 'unique'})
发表回复