pandas表处理下透视表实现pivot_table

为了将列表转换为二维透视表,之前自己写过代码,今天看到pandas直接有这个方法,感觉简单顺手多了,故重写了社会特征属性的人口矩阵和距离矩阵分离的代码,首先介绍一下pivot_table:

pandas.tools.pivot.pivot_table(data, values=None, index=None, columns=None, aggfunc=‘mean‘,fill_value=None, margins=False, dropna=True)

value为显示的值,index为行,columns为列,如下面这个

df = pd.DataFrame({‘A‘ : [‘one‘, ‘one‘, ‘two‘, ‘three‘] * 3,
‘B‘ : [‘A‘, ‘B‘, ‘C‘] * 4,‘C‘ : [‘foo‘, ‘foo‘, ‘foo‘, ‘bar‘, ‘bar‘, ‘bar‘] * 2,
‘D‘ : np.random.randn(12),‘E‘ : np.random.randn(12)})
pd.pivot_table(df, values=‘D‘, index=[‘A‘, ‘B‘], columns=[‘C‘])

这样就是df表中以D作为数值域,A,B为行,C为列的数据视图。

下面是过剩通勤的社会特征分类的修正代码,换成pivot_table就简单了很多:

# authors = Kanonpy
# coding=UTF-8
import pandas as pd
import numpy as np
import os
from scipy.optimize import linprog

distance = pd.read_excel(‘Distance.xlsx‘)

df = pd.read_excel(‘chuli.xls‘)

def commuteCalcu(pop,dist,name):
    #保证pop和dist行列数值相等
    intdistcolumns = {d:int(float(d)) for d in dist.columns}
    intdistindex = {d:int(float(d)) for d in dist.index}
    unicodepopcolumns = {d:unicode(d) for d in pop.columns}
    unicodepopindex = {d:unicode(d) for d in pop.index}
    for d in dist.columns:
        if d not in pop.columns:
            dist = dist.drop(d,axis=1)
            #print ‘the col %s in distance was del‘%(str(d))
      
    for i in dist.index:
        if i not in pop.index:
            dist = dist.drop(i,axis=0)
            #print ‘the col %s in distance was del ‘%(str(i))
      
    for d in pop.columns:
        if d not in dist.columns:
            pop = pop.drop(d,axis=1)
            #print ‘the col %s in distance was del ‘%(str(i))
      
    for i in pop.index:
        if i not in dist.index:
            pop = pop.drop(i,axis=0)
            #print ‘the col %s in distance was del ‘%(str(i))

    if not os.path.exists(u‘%s‘%(name)):
        os.mkdir(u‘%s‘%(name))
        print u‘creat %s_%s file‘%(col,i)
    pop.to_excel(u‘%s/Population.xlsx‘%(name))
    pop.to_excel(u‘%s/Distance.xlsx‘%(name))
    matrix = np.array(pop)*np.array(dist)
    total_commute = matrix.sum()
    commute = total_commute/np.array(pop).sum()
    print u‘%s 总通勤距离为 %s‘%(name,unicode(total_commute))
    print u‘%s 通勤距离(ARC)为 %s‘%(name,unicode(commute))
    print u‘%s 人口总数为 %s‘%(name,unicode(np.array(pop).sum()))

for col in [u‘性别‘, u‘户籍‘, u‘职业‘, u‘收入‘]:
        for i in df.groupby(col).size().index:
            species = df[df[col]==i]
            pt = pd.pivot_table(data=species,values=col,rows=u‘工作地或学校地址‘,
                                cols=u‘居住小区‘,aggfunc=np.size,fill_value=0)
            if sum(pt.shape) > 10:
                commuteCalcu(pt,distance,col+u‘中的‘+unicode(i))
            else:
                print ‘%s_%s is too small‘%(col,i)

——————————————————————————————————————————————————

@Sugar_Lover

时间: 2024-08-05 19:54:51

pandas表处理下透视表实现pivot_table的相关文章

Pandas:透视表(pivotTab)和交叉表(crossTab)

import numpy as np import pandas as pd from pandas import Series,DataFrame 一.透视表(pivotTab) 透视表就是将指定原有DataFrame的列分别作为行索引和列索引,然后对指定的列应用聚集函数(默认情况下式mean函数). df = DataFrame({'类别':['水果','水果','水果','蔬菜','蔬菜','肉类','肉类'], '产地':['美国','中国','中国','中国','新西兰','新西兰',

透视表提取不重复记录(5)-不能用于下拉选项

透视表提取不重复记录(5)-不能用于下拉选项 设计要点:不重复.数据透视表.下拉选项 秀秀:哼,透视表虽然是很强,但是有很多软肋呢! 阿金:嗯?--,你对透视表能有这么深入的了解?是你不会用吧. 秀秀:且!你看,它虽然可以自动提取出现值,但是不能把它作为下拉选项的数据源. 阿金:噢?俺看看.嗯,可能是它认为数据透视表的右下区域都有数据,所以单元格不为空,如果用counta()函数不能判断有几项. 秀秀:哎哟!透视表不是你的强项么?连这个都不了解? 阿金:啊,说明俺对透视表的了解还不够深入啊. 秀

【Excle数据透视表】如何调整压缩形式显示下的缩进字符数

调整前:                                                                                                              调整后:                     解决办法: 通过数据透视表选项设置缩进字符数 步骤 单击数据透视表任意单元格→数据透视表工具→分析→选项→压缩表单中缩进标签设置为0→确定 当改变缩进字符数量时,仅影响当前数据透视表内所有行字段的缩进 以压缩表形式缩进行标

如何使用 Python 对 Excel 做一份数据透视表

如何使用 Python 对 Excel 做一份数据透视表客户这边,其中有一张如同上图所示的数据汇总表,然而需求是,需要将这张表数据做一个数据透视表,最后通过数据透视表中的数据,填写至系统数据库.拿到需求,首先就想到肯定不能直接用设计器去操作 Excel,通过操作 Excel 去做数据透视表,那样,就得通过代码去完成了. 代码分享如下: import pandas as pdimport numpy as np def prvot():f = pd.read_excel(io='C:/file/t

数据透视表

import pandas as pdpivot_data=pd.read_excel('./data/data3.xlsx')pivot_data.head()pivot_data.describe(include='all').T import numpy as np#透视表 求进货价合计.平均值 .计数# print(df2.col())rst1=pivot_data.pivot_table(index=['供应商名称'],values=['销售价'],aggfunc=np.sum)pri

ASP.NET实现类似Excel的数据透视表

代码: /Files/zhuqil/Pivot.zip 数据透视表提供的数据三维视图效果,在Microsoft Excel能创建数据透视表,但是,它并不会总是很方便使用Excel.您可能希望在Web应用程序中创建一个数据透视报表.创建一个简单的数据透视表可能是一件非常复杂的任务.所以,我打算不但为你提供一个非常有用的工具创建简单和高级的数据透视表,而且为你移除一些笼罩他们的神秘面纱. 目标是:我们想要有能力将datatable中的二维的数据转换成三维视图. 在大多数情况下,你会从数据库的查询数据

【峰回路转】Excel技巧百例 11.数据透视表的简单使用-行列转换

Excel的数据透视表不仅可以进行分类汇总,而且可以轻松快捷的进行行列转换 例如: 按照上篇文章中的方法我们可以插入数据透视表,将姓名放到行中,将课程放到列中,将分数放到值中: 从上面的结果中,我们可以清晰的看到有人缺考了英语 如果只显示姓名有重名的怎么办?是否可以把学号也显示出来呢?我们下一篇将介绍如何既显示学号,又显示姓名. 版权声明:本文为博主原创文章,未经博主允许不得转载.

多维透视表 - 矩表实现商品销售对比统计

欢迎大家持续关注葡萄城控件技术团队博客,更多更好的原创文章尽在这里~~ 常见的二维数据透视表(交叉表)通过横向和纵向展示数据,进行一些简单的汇总运算,而传统的数据透视表功能单一,汇总方式简单,已经无法满足现代大数据量各种条件分析,因此多维透视表应运而生. 多维透视表在功能强大的同时,创建难度也会随之提高 多层分组嵌套的复杂的组织结构 复杂的汇总分析公式的编辑 小计和总计的区分等等要面临的复杂问题 如果用代码实现,可能复杂程度不堪想象,更不用谈大数据量级别下报表加载的性能问题.而使用现有的简单报表

Excel2010数据透视表1

“透视”作为一个动词,意思是旋转.如果将数据看成是一个物体,数据透视表允许旋转数据汇总,从不同角度或观点来看它.数据透视表能够轻松地移动字段,交换字段位置,设置创建项目的特定组. 如果给出一个陌生的物体让你鉴定,你可能会从不同的角度观察它来得出答案.处理数据透视表与研究一个陌生的物体类似.此时,物体就是你自己的数据.数据透视表需要多次试验,所以要旋转并控制数据透视表直到你满意为止.最后得到的结果会让你感到惊讶. 数据透视表是一种让用户可以根据不同的分类.不同的汇总方式.快速查看各种形式的数据汇总