NumPy的ufuncs也可以操作pandas对象

>>> frame
one two three four
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
d 12 13 14 15
>>> np.square(frame)#求平方
one two three four
a 0 1 4 9
b 16 25 36 49
c 64 81 100 121
d 144 169 196 225
>>>

用DataFrame的apply方法,可以将函数应用到由各列或行所形成的一维数组中。

>>> frame
one two three four
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
d 12 13 14 15
>>> func = lambda x : x.max()-x.min()
>>> frame.apply(func)
one 12
two 12
three 12
four 12
dtype: int64
>>> frame.apply(func,axis = 1)
a 3
b 3
c 3
d 3
dtype: int64

用DataFrame的applymap方法,可以将函数应用到元素级的数据上。

>>> f = lambda x : x+1
>>> frame
one two three four
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
d 12 13 14 15
>>> frame.applymap(f)
one two three four
a 1 2 3 4
b 5 6 7 8
c 9 10 11 12
d 13 14 15 16

Series也有一个元素级函数应用的方法map

>>> frame['one'] #获取dataframe的列为一个Series对象
a 0
b 4
c 8
d 12
Name: one, dtype: int32
>>> frame['one'].map(f)
a 1
b 5
c 9
d 13
Name: one, dtype: int64
>>>

排序和排名

用sort_index对行或列进行排序,返回一个排序好的新对象

>>> obj = Series(range(4),index=['d','b','a','c'])
>>> new_obj = obj.sort_index()
>>> new_obj
a 2
b 1
c 3
d 0
dtype: int64
>>> obj
d 0
b 1
a 2
c 3
dtype: int64
>>>

>>> new_obj = obj.sort_index(ascending = False)#默认是升序,通过参数ascending可以设置降序
>>> new_obj
d 0
c 3
b 1
a 2
dtype: int64

对于DataFrame可以根据任意轴进行排序

>>> frame = DataFrame(np.random.randn(4,4),columns = ['c','a','d','b'],index=[3,1,4,2])
>>> frame
c a d b
3 0.004950 -1.272352 1.050491 0.823530
1 1.198348 0.647114 0.154131 -0.636497
4 -0.358309 0.525307 -1.868459 0.867197
2 -0.021764 0.140501 1.459700 -0.090884
>>> frame.sort_index()
c a d b
1 1.198348 0.647114 0.154131 -0.636497
2 -0.021764 0.140501 1.459700 -0.090884
3 0.004950 -1.272352 1.050491 0.823530
4 -0.358309 0.525307 -1.868459 0.867197
>>> frame.sort_index(axis =1)
a b c d
3 -1.272352 0.823530 0.004950 1.050491
1 0.647114 -0.636497 1.198348 0.154131
4 0.525307 0.867197 -0.358309 -1.868459
2 0.140501 -0.090884 -0.021764 1.459700

除了按照索引排序之外,还可以按照值排序

按值对Series进行排序的时候,用sort_values方法。在老版本中是order方法。

>>> obj = Series([3,4,1,6])
>>> obj
0 3
1 4
2 1
3 6
dtype: int64
>>> obj.sort_values()
2 1
0 3
1 4
3 6
dtype: int64

在排序时,缺失值会默认放到末尾。

在DataFrame中,可能希望按照一个或多个列中的值进行排序

>>> frame = DataFrame({'a':[4,7,-3,2],'b':[1,0,0,1]})
>>> frame
a b
0 4 1
1 7 0
2 -3 0
3 2 1
>>> frame.sort_index(by='a')#这个方法将在不久之后废弃,可以使用sort_values方法
__main__:1: FutureWarning: by argument to sort_index is deprecated, please use .sort_values(by=...)
a b
2 -3 0
3 2 1
0 4 1
1 7 0
>>> frame.sort_values(by='a')
a b
2 -3 0
3 2 1
0 4 1
1 7 0
>>>

根据多个列排序

>>> frame.sort_values(by=['b','a'])
a b
2 -3 0
1 7 0
3 2 1
0 4 1

排名跟排序有紧密的联系,首先根据值排序,然后增设一个排名值(从1开始,直到有效值的数量。如果两个值相等,都取两个排名的均值)

>>> obj = Series([7,-5,7,4,2,0,4])
>>> obj
0 7
1 -5
2 7
3 4
4 2
5 0
6 4
dtype: int64
>>> obj.rank()
0 6.5
1 1.0
2 6.5
3 4.5
4 3.0
5 2.0
6 4.5
dtype: float64
>>>

也可以根据值在原来数据中出现的顺序,进行排名。如果某几个值相等,现在数据中出现的排名靠前,这需要借助于method选项

>>> obj.rank(method='first')
0 6.0
1 1.0
2 7.0
3 4.0
4 3.0
5 2.0
6 5.0
dtype: float64

当然也支持降序排列,ascending=False即可

dataframe对象默认按照行排名,设置轴选项axis=1,就会按照列排名

method选项的值有

method 说明
average 默认:在相等分组中,为各个值分配平均排名
mix     使用整个分组的最大排名
min 使用整个分组的最小排名
first 按照值在原始数据中出现的顺序分配排名

带有重复值的轴索引

许多pandas函数需要标签唯一,但这并不是强制性的。

可以通过索引的is_unique去判断是否唯一

>>> obj =Series(range(5),index=['a','a','b','b','c'])
>>> obj
a 0
a 1
b 2
b 3
c 4
dtype: int64

>>> obj.index.is_unique
False

 

带有重复值索引,数据的选取时,如果索引对应多个值,返回一个Series,否则返回单个值

>>> obj['a']
a 0
a 1
dtype: int64
>>> obj['c']
4

对于DataFrame也是如此

如果索引对应多行,返回的依然是一个dataframe对象,否则是一个Series对象

>>> df = DataFrame(np.random.randn(5,3),index=['a','a','b','b','c'])
>>> df.ix['a']
0 1 2
a -0.757846 0.713964 -0.674956
a 0.198044 1.093223 -0.342281
>>> df.ix['c']
0 -2.647372
1 -0.526367
2 -0.296859
Name: c, dtype: float64
>>> type(df.ix['a'])
<class 'pandas.core.frame.DataFrame'>
>>> type(df.ix['c'])
<class 'pandas.core.series.Series'>

pandas(二)函数应用和映射的更多相关文章

  1. Pandas DataFrame 函数应用和映射

    apply Numpy 的ufuncs通用函数(元素级数组方法)也可用于操作pandas对象: 另一个常见的操作是,将函数应用到由各列或行所形成的一维数组上.Dataframe的apply方法即可实现 ...

  2. NeHe OpenGL教程 第二十二课:凹凸映射

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  3. MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存

    目录(?)[-] 二SQL语句映射文件2增删改查参数缓存 select insert updatedelete sql parameters 基本类型参数 Java实体类型参数 Map参数 多参数的实 ...

  4. 单片机中printf函数的重映射

    单片机中printf函数的重映射 一.源自于:大侠有话说 1.如果你在学习单片机之前学过C语言,那么一定知道printf这个函数.它最最好用的功能 除了打印你想要的字符到屏幕上外,还能把数字进行格式化 ...

  5. 【转载】pandas常用函数

    原文链接:https://www.cnblogs.com/rexyan/p/7975707.html 一.import语句 import pandas as pd import numpy as np ...

  6. MyBatis学习 之 二、SQL语句映射文件(1)resultMap

    目录(?)[-] 二SQL语句映射文件1resultMap resultMap idresult constructor association联合 使用select实现联合 使用resultMap实 ...

  7. Pandas的函数应用、层级索引、统计计算

    1.Pandas的函数应用 1.apply 和 applymap 1. 可直接使用NumPy的函数 示例代码: # Numpy ufunc 函数 df = pd.DataFrame(np.random ...

  8. Spring MVC 使用介绍(六)—— 注解式控制器(二):请求映射与参数绑定

    一.概述 注解式控制器支持: 请求的映射和限定 参数的自动绑定 参数的注解绑定 二.请求的映射和限定 http请求信息包含六部分信息: ①请求方法: ②URL: ③协议及版本: ④请求头信息(包括Co ...

  9. pandas常用函数之shift

    shift函数是对数据进行移动的操作,假如现在有一个DataFrame数据df,如下所示: index value1 A 0 B 1 C 2 D 3 那么如果执行以下代码: df.shift() 就会 ...

  10. pandas常用函数之diff

    diff函数是用来将数据进行某种移动之后与原数据进行比较得出的差异数据,举个例子,现在有一个DataFrame类型的数据df,如下: index value1 A 0 B 1 C 2 D 3 如果执行 ...

随机推荐

  1. Unity3D中uGUI事件系统简述及使用方法总结

    Unity3D的uGUI系统的将UI可能触发的事件分为12个类型,即EventTriggerType枚举的12个值.如下图所示: 先以PointerClick为例.这个是用于某点点击事件.其他事件都可 ...

  2. linux web.py spawn-fcgi web.py 配置

    本来要用uwsgi,但是...介于以前说过...这台服务器略老...redhat 3的系统...确实很老,没法用yum,没法安装很多东西,打算自己编译uwsgi,但是编译各种错误...花了快一天,最后 ...

  3. vSphereClient向ESXi主机分配许可证

    ESXi服务器需要使用VMwarevSphereClient进行管理(7.0+版本可以通过浏览器进行管理)在VMware vSphere client可以方便的创建.管理虚拟机,并分配相应的资源.要能 ...

  4. C# mvc中动态压缩文件发送给前端

    前言 帮朋友解决一个C#中发送压缩文件的的问题,因为感觉解释起来更麻烦,就直接用几分钟时间写了个小Demo.本着"走过路过"不错过的原则,也给记录一下. 1.前端代码 非常简单的一 ...

  5. hpfeeds协议解析

    一. hpfeeds协议简介 hpfeeds是一个轻量级的验证发布-订阅协议(authenticated publish-subscribe protocol). 发布-订阅协议:发布/订阅协议定义了 ...

  6. MVC模式中M,V,C每个代表意义,并简述在Struts中MVC的表现方式。

    解答: MVC是Model-View-Controller 的缩写,Model代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),View 是应用的表示层(由JSP页面产生)Control ...

  7. spring-redis SortedSet类型成员的过期时间处理

    redis默认是只支持简单key的过期处理的,像SortedSet类型,也是针对整个set的过期处理,不支持对set的某个成员的过期处理: 为了解决这个问题,做法如下: 1.存储key及值信息到red ...

  8. Jmeter JDBC执行多条SQL

    今天在编写自动化回归脚本的时候,需要在jmeter的jdbc请求中执行多条sql,在百度里搜索了一些文章,按照网上提供的步骤,发现不起作用,后来发现是作者的截图误导了,为了让后面的同学少走弯路,这里我 ...

  9. Android获取 应用程序大小,数据大小,缓存大小

    在项目中创建,android.content.pm 包名.里面创建两个aidl文件.PackageStats.aidl  和 IPackageStatsObserver.aidl. PackageSt ...

  10. boost::interprocess::shared_memory_object(1)(基本类型)

    #include <iostream> #include <boost/interprocess/managed_shared_memory.hpp> struct pos2d ...