5.2.5 算术和数据对齐
Series对象或者是DataFrame对象相加时,相同的索引标签项相加,没有的索引标签项合并到结果,值是NaN
df1 = pd.DataFrame({'A':[1,2]}) df2 = pd.DataFrame({'B':[3,4]}) df1 Out[5]: A 0 1 1 2 df2 Out[6]: B 0 3 1 4 df1 + df2 Out[7]: A B 0 NaN NaN 1 NaN NaN df3 =pd.DataFrame({'A':[3,4],'C':[1,1]}) df3 + df1 Out[9]: A C 0 4 NaN 1 6 NaN
做运算时可以传入填充值来填充NaN
比如df1.add(df2,fill_value=0)
5.2.5.2 DataFrame和Series间的操作
DataFrame对象的iloc取值,就是一个Series对象,当DataFrame和Series进行加减运算时,相当于DataFrame每一行和Series进行运算,这个就是广播机制
当然也可以指定在列上进行广播,DataFrame.sub(Series3,axis='index')
5.2.6 函数应用和映射
可以将函数应用到行或列上
f = lambda x: x.max() - x.min() f Out[13]: <function __main__.<lambda>(x)> df1.apply(f) Out[14]: A 1 dtype: int64
当然apply可以传入 axis=‘columns’,每行进行调用
逐元素进行的函数是applymap
5.2.7排序和排名
调用sort_index函数进行排序,可以传递参数 axis=1是在列上进行排序,默认是0在行上进行排序
sort_values() 函数按元素进行排序
可以传入by='列名',对列进行排序
frame = pd.DataFrame({'b':[4,7,-3,2],'a':[0,1,0,1]}) frame.sort_values(by='b') Out[17]: b a 2 -3 0 3 2 1 0 4 0 1 7 1
可以传递多个列名
frame.sort_values(by=['a','b']) Out[18]: b a 2 -3 0 0 4 0 3 2 1 1 7 1
是先对 a列进行排序,如果a列中有相同的,则再按b进行排序
rank函数是对Series对象和DataFrame对象进行排名
默认没有传入参数时,有相同元素的话,是相同元素的排名相加除以个数,得出他们的排名
obj=pd.Series([7,-5,7,4,2,0,4]) obj.rank() Out[20]: 0 6.5 1 1.0 2 6.5 3 4.5 4 3.0 5 2.0 6 4.5 dtype: float64
可以看到两个7的排名是6.5就是 (6+7)/2 的结果,4的排名也如此