学习groupby-agg用法
groupby 分组
数据如下
import pandas as pd
df=pd.read_excel('销售明细.xlsx')
print(df)
name 品种 数量 单价 金额 城市
0 张三 桔子 2 1.2 2.4 太原
1 李四 苹果 3 1.1 3.3 临汾
2 王五 苹果 4 1.4 5.6 临汾
3 张三 香蕉 5 2.1 10.5 太原
4 王五 桔子 6 1.3 7.8 临汾
5 tom 桃子 7 2.0 14.0 侯马
name 品种 数量 单价 金额 城市
0 张三 桔子 2 1.2 2.4 太原
1 李四 苹果 3 1.1 3.3 临汾
2 王五 苹果 4 1.4 5.6 临汾
3 张三 香蕉 5 2.1 10.5 太原
4 王五 桔子 6 1.3 7.8 临汾
5 tom 桃子 7 2.0 14.0 侯马
hz=df.groupby('name').agg({'name':'count','金额':'sum'})
print(hz)
name 金额
name
tom 1 14.0
张三 2 12.9
李四 1 3.3
王五 2 13.4
1列,两个函数统计,改名
h=df.groupby('name')['金额'].agg(['count','sum']).rename(columns={'count':'cnt'})
print(h)
cnt sum
name
tom 1 14.0
张三 2 12.9
李四 1 3.3
王五 2 13.4
统计且改名
h=df.groupby('name')['金额'].agg([('cnt','count'),('hj','sum')]) #较好的方法,直接变了列名
print(h.columns)
print(h)
Index(['cnt', 'hj'], dtype='object')
cnt hj
name
tom 1 14.0
张三 2 12.9
李四 1 3.3
王五 2 13.4
换一种方法,会改变列名
h=df.groupby('name').agg({'金额':[('cnt','count'),('hj','sum')]}) #但列变成多重,MultiIndex([('金额', 'cnt'),
print(h.columns)
MultiIndex([('金额', 'cnt'),
('金额', 'hj')],
)
h=df.groupby('name').agg({'金额':['count','sum']}).rename(columns={('金额','count'):'a'}) #改不了名
h.columns=['a','b'] #才能改了名
#所以,正确方法是
h=df.groupby('name').agg({'name':'count','金额':'sum','单价':'max','品种':'first'})
h.columns=['cnt','hj','最高单价','首单产品']
print(h)
#或者等效
h=df.groupby('name').agg({'金额':['count','sum'],'单价':'max','品种':'first'})
cnt hj 最高单价 首单产品
name
tom 1 14.0 2.0 桃子
张三 2 12.9 2.1 桔子
李四 1 3.3 1.1 苹果
王五 2 13.4 1.4 苹果
对照SQL的 select * form table1
left join
select * from table2
df2=pd.read_excel('联系方式.xlsx',dtype={'tel':str})
print(df2)
df3=pd.merge(df,df2,on='name',how='left') #相当于 left join
print(df3)
name tel
0 张三 2220003
1 李四 2220004
2 jerry 95000
3 tom 95001
4 jack 95002
name 品种 数量 单价 金额 城市 tel
0 张三 桔子 2 1.2 2.4 太原 2220003
1 李四 苹果 3 1.1 3.3 临汾 2220004
2 王五 苹果 4 1.4 5.6 临汾 NaN
3 张三 香蕉 5 2.1 10.5 太原 2220003
4 王五 桔子 6 1.3 7.8 临汾 NaN
5 tom 桃子 7 2.0 14.0 侯马 95001
相当于 SQL的 having语句
g=df3.groupby('name').agg({'金额':['count','sum'],'tel':'first'})
print(g)
g.columns=['笔数','hj','tel']
having=g[g['hj']>10] #相当于having语句 或者 having=g[g[('金额','sum')]>10]
print(having)
金额 tel
count sum first
name
tom 1 14.0 95001
张三 2 12.9 2220003
李四 1 3.3 2220004
王五 2 13.4 NaN
笔数 hj tel
name
tom 1 14.0 95001
张三 2 12.9 2220003
王五 2 13.4 NaN
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhggijea
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13