pandas 还有一个重要的功能,就是他可以对不同索引的对象进行算数运算。
对象相加, 如果存在不同的索引对,则结果的索引就是该索引对的并集。

先来个例子

Series

In [33]: s1 = Series([7.3, -2.5, 3.4, 1.5], index=['a', 'c', 'd', 'e'])

In [34]: s2 = Series([-2.1, 3.6, -1.5, 4, 3.1], index=['a', 'c', 'e', 'f', 'g'])

In [35]: s1
Out[35]:
a 7.3
c -2.5
d 3.4
e 1.5
dtype: float64 In [36]: s2
Out[36]:
a -2.1
c 3.6
e -1.5
f 4.0
g 3.1
dtype: float64 In [37]: s1 + s2
Out[37]:
a 5.2
c 1.1
d NaN
e 0.0
f NaN
g NaN
dtype: float64

生成值

In [38]: s3 = Series([-2.1, 3.6, -1.5, 4, 3.1], index=['a', 'c', 'e', 'f', 'g'])

In [39]: s1 + s2 + s3
Out[39]:
a 3.1
c 4.7
d NaN
e -1.5
f NaN
g NaN
dtype: float64
也就是说NaN值不会变

DataFrame

add   用于加法(+)方法
sub 用于减法(-)方法
div 用于除法(/)方法
mul 用于乘法(*)方法
In [45]: df1 = DataFrame(np.arange(9.).reshape((3,3)), columns=list('bcd'), index=['Ohio', "Texas", "Colorado"])

In [46]: df2 = DataFrame(np.arange(12.).reshape((4,3)), columns=list('bde'), index=["Uhah", 'Ohio', "Texas", "Oregon"])

  

In [47]: df1 + df2
Out[47]:
b c d e
Colorado NaN NaN NaN NaN
Ohio 3.0 NaN 6.0 NaN
Oregon NaN NaN NaN NaN
Texas 9.0 NaN 12.0 NaN
Uhah NaN NaN NaN NaN 那么可以使用add方法,传入df2一个fill_valued参数
In [8]: df1.add(df2, fill_value=0)
Out[8]:
b c d e
Colorado 6.0 7.0 8.0 NaN
Ohio 3.0 1.0 6.0 5.0
Oregon 9.0 NaN 10.0 11.0
Texas 9.0 4.0 12.0 8.0
Uhah 0.0 NaN 1.0 2.0

DataFrame和Series之间的运算

Series

In [40]: arr = np.arange(12.).reshape((3, 4))

In [41]: arr
Out[41]:
array([[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.]]) In [42]: arr[0]
Out[42]: array([ 0., 1., 2., 3.]) In [43]: arr - arr[0]
Out[43]:
array([[ 0., 0., 0., 0.],
[ 4., 4., 4., 4.],
[ 8., 8., 8., 8.]])

DataFrame

In [44]: frame = DataFrame(np.arange(12.).reshape((4,3)), columns=list('bde'), index=["Uhah", 'Ohio', "Texas", "Oregon"])

In [45]: series = frame.ix[0]

In [46]: frame - series
Out[46]:
b d e
Uhah 0.0 0.0 0.0
Ohio 3.0 3.0 3.0
Texas 6.0 6.0 6.0
Oregon 9.0 9.0 9.0

注意:如果某个索引值在DataFrame的列或Series的索引中找不到, 则参与运算的两个对象就会被重新索引以形成并集

In [47]: series2 = Series(range(3), index=['b', 'e', 'f'])

In [48]: frame + series2
Out[48]:
b d e f
Uhah 0.0 NaN 3.0 NaN
Ohio 3.0 NaN 6.0 NaN
Texas 6.0 NaN 9.0 NaN
Oregon 9.0 NaN 12.0 NaN

如果希望列在行上广播,必须使用算术运算方法

In [63]: frame.sub(series, axis=0)
Out[63]:
b d e
Uhah -1.0 0.0 1.0
Ohio -1.0 0.0 1.0
Texas -1.0 0.0 1.0
Oregon -1.0 0.0 1.0

pandas 的算术运算和数据对齐的更多相关文章

  1. pandas读书笔记 算数运算和数据对齐

    pandas最重要的一个功能是,它可以对不同索引的对象进行算数运算.在对象相加时,如果存在不同的索引对,则结果的索引就是该索引对的并集. Series s1=Series([,3.4,1.5],ind ...

  2. 利用Python进行数据分析-Pandas(第五部分-数据规整:聚合、合并和重塑)

    在许多应用中,数据可能分散在许多文件或数据库中,存储的形式也不利于分析.本部分关注可以聚合.合并.重塑数据的方法. 1.层次化索引 层次化索引(hierarchical indexing)是panda ...

  3. (数据科学学习手札99)掌握pandas中的时序数据分组运算

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们在使用pandas分析处理时间序列数据 ...

  4. C++中数据对齐

    大体看了看数据对齐,不知道是否正确,总结如下: struct A { char name; double dHeight; int age; }; sizeof(A) = (1+7+8+4+4) =  ...

  5. C/C++数据对齐汇总

     C/C++数据对齐汇总  这里用两句话总结数据对齐的原则: (1)对于n字节的元素(n=2,4,8,...),它的首地址能被n整除,才干获得最好的性能: (2)如果len为结构体中长度最长的变量,s ...

  6. gpu显存(全局内存)在使用时数据对齐的问题

    全局存储器,即普通的显存,整个网格中的随意线程都能读写全局存储器的任何位置. 存取延时为400-600 clock cycles  很easy成为性能瓶颈. 訪问显存时,读取和存储必须对齐,宽度为4B ...

  7. pandas(七)数据规整化:清理、转换、合并、重塑之合并数据集

    pandas对象中的数据可以通过一些内置的方式进行合并: pandas.merge 可根据一个或多个键将不同的DataFrame中的行连接起来. pandas.concat可以沿着一条轴将多个对象堆叠 ...

  8. 使用Pandas将多个数据表合一

    使用Pandas将多个数据表合一 将多张数据表合为一张表,便于统计分析,进行这一操作的前提为这多张数据表互相之间有关联信息,或者有相同的列. import pandas as pd unames = ...

  9. 结构体的数据对齐 #pragma浅谈

    之前若是有人拿个结构体或者联合体问我这个结构占用了多少字节的内存,我一定觉得这个人有点low, 直到某某公司的一个实习招聘模拟题的出现,让我不得不重新审视这个问题, 该问题大致如下: typedef ...

随机推荐

  1. C语言:存取结构体成员的点运算符(.)和箭头运算符(->)的区别

    转自:http://blog.csdn.net/taric_ma/article/details/7397362 一直以为这两个是没有什么区别的,可以相互替换,今天又翻了一下<C语言核心技术&g ...

  2. Android动画三部曲之中的一个 View Animation &amp; LayoutAnimation

    转载请注明出处:http://blog.csdn.net/crazy1235/article/details/50612827 本篇文章对android的Tween动画和帧动画以及布局动画进行总结. ...

  3. golang gc 优化思路以及实例分析

    一个即将上线的go 写的高频服务,压测的时候发现 gc 特别高,高到10%-15% 左右了,本文记录下优化 gc 的过程和和思路.线上环境1.10. 首先,查看gc 是否有异常,我们可以使用 gctr ...

  4. 读取word到二进制,再转成word

    static void Main(string[] args) { try { var strParams = new Dictionary<string, string>(); stri ...

  5. Java中创建String的两种方式差异

    我们知道创建一个String类型的变量一般有以下两种方法: String str1 = "abcd"; String str2 = new String("abcd&qu ...

  6. 调试web api的工具 谷歌插件 Restlet

    介绍 http://chromecj.com/productivity/2017-08/789.html

  7. (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决

    boost.property_tree可以用来解析xml和json文件,我主要用它来解析xml文件,它内部封装了号称最快的xml解析器rapid_xml,其解析效率还是很好的.但是在使用过程中却发现各 ...

  8. vim学习日志(7):替换、删除文件中的字符

    vim全局替换文件: 语法为 :[addr]s/源字符串/目的字符串/[option] 全局替换命令为::%s/源字符串/目的字符串/g [addr] 表示检索范围,省略时表示当前行. 如:“1,20 ...

  9. CSAPP 读书笔记 - 2.31练习题

    根据等式(2-14) 假如w = 4 数值范围在-8 ~ 7之间 2^w = 16 x = 5, y = 4的情况下面 x + y = 9 >=2 ^(w-1)  属于第一种情况 sum = x ...

  10. openfire ping的smack解决方案(维持在线状态)

    连接中关联如下: // iq提供者 roviderManager.getInstance().addIQProvider("ping", "urn:xmpp:ping&q ...