一、数据透视
1 数据透视表:pivot_table
pivot_table有四个最重要的参数index、values、columns、aggfunc。
pivot_table(data, values=None, index=None, columns=None,aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')
1 index
需要聚合的列名,默认情况下聚合所有数据值的列。
import pandas as pd
path = r'F:\Pycharm_projects\Numpy_Pandas_study\透视.xlsx'
data = pd.read_excel(path,engine='openpyxl')
data2 = pd.pivot_table(data,index=['部门','销售人员'])
print(data2)
2 values
在结果透视的行上进行分组的列名或其它分组键(透视表里显示的列)。
import pandas as pd
path = r'F:\Pycharm_projects\Numpy_Pandas_study\透视.xlsx'
data = pd.read_excel(path,engine='openpyxl')
data2 = pd.pivot_table(data,index=['部门','销售人员'],values=['数量','金额'])
print(data2)
3 columns
在结果透视表的列上进行分组的列名或其它分组键。
import pandas as pd
path = r'F:\Pycharm_projects\Numpy_Pandas_study\透视.xlsx'
data = pd.read_excel(path,engine='openpyxl')
data2 = pd.pivot_table(data,index=['部门','销售人员'],values=['数量','金额'],columns='所属区域')
print(data2)
4 Aggfunc
聚合函数或函数列表(默认情况下是mean)可以是groupby里面的任意有效函数。
import pandas as pd
import numpy as np
path = r'F:\Pycharm_projects\Numpy_Pandas_study\透视.xlsx'
data = pd.read_excel(path,engine='openpyxl')
data2 = pd.pivot_table(data,index=['部门','销售人员'],values=['数量','金额'],columns='所属区域',aggfunc=[sum,np.mean])
print(data2)
5 其它参数
- fill_value:在结果表中替换缺失值。
- dropna:如果为True,将不含所有条目均为Na的列(默认为False)
- margins:添加行/列小计和总计(默认为False)
2 交叉表:crosstab
是透视表的一部分, aggfunc=count而已。
pd.crosstab(data.Nationality, data.Handedness, margins=True)
【示例】
import pandas as pd
import numpy as np
path = r'F:\Pycharm_projects\Numpy_Pandas_study\透视.xlsx'
data = pd.read_excel(path,engine='openpyxl')
data2 = pd.crosstab([data.日期.dt.month,data.所属区域],data.部门,margins=True)
print(data2)
二、vlookup功能
(1)
import pandas as pd
import numpy as np
path = r'F:\Pycharm_projects\Numpy_Pandas_study\Vlookup.xlsx'
data1 = pd.read_excel(path, sheet_name='花名册', engine='openpyxl')
data2 = pd.read_excel(path, sheet_name='成绩单', engine='openpyxl')
result = pd.merge(data1,data2.loc[:,['学号','总分']],how='left',on='学号')
print(result)
(2)
如果指定列的位置,先把需要调整的列的数据拿出来,之后,再将这个列删掉,最后,再用插入的方式把这个列调整到对应的位置上。
import pandas as pd
路径 = 'c:/pandas/Vlookup.xlsx'
数据1 = pd.read_excel(路径,sheet_name='花名册')
数据2 = pd.read_excel(路径,sheet_name='成绩单')
结果 = pd.merge(数据1,数据2.loc[:,['学号','总分']],how='left',on='学号')
print(结果)
结果_总分 = 结果.总分
结果 = 结果.drop('总分',axis=1) # 笔记10.1
结果.insert(0,'总分',结果_总分) # Py基础篇PPT第30页在指定位置新增数据
print(结果)