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的排名也如此