透视表的用法python

参考网址:https://blog.csdn.net/moxigandashu/article/details/69486269

1,交叉表(index,columns必须要给定)

# index和columns是必须要指定的参数,margin为汇总项目,可以不要(也可以重命名)
pd.crosstab(df.deptno,df.sal,margins=True)

2,透视表 pivot_table(和EXCEL中的透视表原理类似,index,columns可以自由给定,支持汇总,支持自定义函数)

# 对于它来说,他可以只指定index,或者columns,而且他的用法和EXCEL的透视表的用法一致
# index 相当于excel透视表中的行,columns相当于列,values 相当于值
df.pivot_table('sal',index = 'deptno',aggfunc='sum',margins=True)
df.pivot_table('sal',index='deptno',columns='job',aggfunc='sum')
df.pivot_table(values='sal',index='deptno')
df.pivot_table('sal',index =['deptno','job'],columns='ename',aggfunc='sum')

# 另外aggfunc也可以使用自己定义的函数:
def maxMin(group):
    return group.max() - group.min()

# 对于调用maxMin函数的时候,这时候不需要加括号,表示引用maxMin(当然加括号表示拿到函数的运算结果)
df.pivot_table('sal',index = 'deptno',aggfunc=maxMin)

3,分组groupby的使用,和数据库中的groupby原理类似


#  计算步骤:首先按照deptno,job进行聚类,然后对sal,comm进行count计算
# 他与pivot_table不一样的有:
# 第一:groupby 简洁,用法差不多,by 相当于 index,后面的['sal','comm']相当于columns
# 第二:groupby 不支持汇总,不支持自定义函数
df.groupby(by=['deptno','job'])['sal','comm'].count()

备注:数据:df就是oracle中的数据表emp表:

数据如下:

empno,ename,job,mgr,hiredate,sal,comm,deptno
7369,SMITH,CLERK,7902,1980/11/17,800,0,20
7499,ALLEN,SALESMAN,7698,1981/2/20,1600,300,30
7521,WARD,SALESMAN,7698,1981/2/22,1250,500,30
7566,JONES,MANAGER,7839,1981/4/2,2975,0,20
7654,MARTIN,SALESMAN,7698,1981/9/28,1250,1400,30
7698,BLAKE,MANAGER,7839,1981/5/1,2850,0,30
7782,CLARK,MANAGER,7839,1981/6/9,2450,0,10
7788,SCOTT,ANALYST,7566,1982/11/9,3000,0,20
7839,KING,PRESIDENT,7322,1981/12/17,5000,0,10
7844,TURNER,SALESMAN,7698,1981/12/8,1500,0,30
7876,ADAMS,CLERK,7788,1983/1/12,1100,0,20
7900,JAMES,CLERK,7698,1981/3/3,950,0,30
7902,FORD,ANALYST,7566,1981/6/3,3000,0,20
7934,MILLER,CLERK,7782,1982/1/23,1300,0,10

猜你喜欢

转载自blog.csdn.net/qwertyuiop5rghar/article/details/84476833
今日推荐