Pyhton科学计算工具Pandas(十)—— 透视表和交叉表
2018-03-29 01:29
411 查看
Pyhton科学计算工具Pandas(十)—— 透视表和交叉表.ipynb
透视表
# 透视表:pivot_table # pd.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All') date = ['2017-5-1','2017-5-2','2017-5-3']*3 rng = pd.to_datetime(date) df = pd.DataFrame({'date':rng, 'key':list('abcdabcda'), 'values':np.random.rand(9)*10}) print(df) print('-----') print(pd.pivot_table(df, values = 'values', index = 'date', columns = 'key', aggfunc=np.sum)) # 也可以写 aggfunc='sum' print('-----') # data:DataFrame对象 # values:要聚合的列或列的列表 # index:数据透视表的index,从原数据的列中筛选 # columns:数据透视表的columns,从原数据的列中筛选 # aggfunc:用于聚合的函数,默认为numpy.mean,支持numpy计算方法 print(pd.pivot_table(df, values = 'values', index = ['date','key'], aggfunc=len)) print('-----') # 这里就分别以date、key共同做数据透视,值为values:统计不同(date,key)情况下values的平均值 # aggfunc=len(或者count):计数
date key values 0 2017-05-01 a 4.395979 1 2017-05-02 b 8.212326 2 2017-05-03 c 9.759327 3 2017-05-01 d 9.336916 4 2017-05-02 a 0.170616 5 2017-05-03 b 6.034662 6 2017-05-01 c 2.305592 7 2017-05-02 d 0.707555 8 2017-05-03 a 7.578554 ----- key a b c d date 2017-05-01 4.395979 NaN 2.305592 9.336916 2017-05-02 0.170616 8.212326 NaN 0.707555 2017-05-03 7.578554 6.034662 9.759327 NaN ----- values date key 2017-05-01 a 1.0 c 1.0 d 1.0 2017-05-02 a 1.0 b 1.0 d 1.0 2017-05-03 a 1.0 b 1.0 c 1.0 -----
交叉表
# 交叉表:crosstab # 默认情况下,crosstab计算因子的频率表,比如用于str的数据透视分析 # pd.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, dropna=True, normalize=False) df = pd.DataFrame({'A': [1, 2, 2, 2, 2], 'B': [3, 3, 4, 4, 4], 'C': [1, 1, np.nan, 1, 1]}) print(df) print('-----') print(pd.crosstab(df['A'],df['B'])) print('-----频率表') # 如果crosstab只接收两个Series,它将提供一个频率表。 # 用A的唯一值,统计B唯一值的出现次数 print(pd.crosstab(df['A'],df['B'],normalize=True)) print('-----归一化') # normalize:默认False,将所有值除以值的总和进行归一化 → 为True时候显示百分比 print(pd.crosstab(df['A'],df['B'],values=df['C'],aggfunc=np.sum)) print('-----求和') # values:可选,根据因子聚合的值数组 # aggfunc:可选,如果未传递values数组,则计算频率表,如果传递数组,则按照指定计算 # 这里相当于以A和B界定分组,计算出每组中第三个系列C的值 print(pd.crosstab(df['A'],df['B'],values=df['C'],aggfunc=np.sum, margins=True)) print('-----') # margins:布尔值,默认值False,添加行/列边距(小计)
A B C 0 1 3 1.0 1 2 3 1.0 2 2 4 NaN 3 2 4 1.0 4 2 4 1.0 ----- B 3 4 A 1 1 0 2 1 3 -----频率表 B 3 4 A 1 0.2 0.0 2 0.2 0.6 -----归一化 B 3 4 A 1 1.0 NaN 2 1.0 2.0 -----求和 B 3 4 All A 1 1.0 NaN 1.0 2 1.0 2.0 3.0 All 2.0 2.0 4.0 -----
相关文章推荐
- Pyhton科学计算工具Pandas(六)—— 文本数据处理
- Pyhton科学计算工具pandas(一)—— Series 数据结构
- Pyhton科学计算工具Pandas(七)—— 数据的合并,连接与修补
- Pyhton科学计算工具Pandas(三) —— 数据结构Dataframe的基本操作
- Pyhton科学计算工具Pandas(八)—— 数据的去重及替换
- Pyhton科学计算工具Pandas(五)—— 常用的数值计算和统计方法
- Pyhton科学计算工具Pandas(九)—— 数据分组
- Pyhton科学计算工具Numpy(一) 之数组
- Pyhton科学计算工具Numpy(二)之数组索引切片,numpy随机数及文件生成读取
- 科学计算工具-ipython
- 03_8Pandas_透视表与交叉表
- Python多版本切换工具-Pyenv\virtualenv及Anaconda科学计算环境的配置
- Python科学计算之Pandas详解
- 动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题
- 科学计算常用开源工具略述
- pyhton3 科学计算
- windows下安装科学计算模块 numpy pandas等
- Python数据科学之处理数据工具教程2(Pandas前篇)
- pandas 计算工具
- Python多版本切换工具-Pyenv\virtualenv及Anaconda科学计算环境的配置