DataFrame的apply方法,将函数应用到行或者列形成的一维数组上.
frame=pd.DataFrame(np.random.randn(4,3),columns=list('bde'),index=['Utha','Ohio','Texas','Oregon'])
frame
. | b | d | e |
---|---|---|---|
Utha | -0.683356 | -0.577942 | -0.022012 |
Ohio | -0.230113 | -1.240582 | -0.497071 |
Texas | -0.487803 | 0.044398 | 0.958905 |
Oregon | -0.178136 | -1.201671 | -0.921106 |
np.abs(frame)
. | b | d | e |
---|---|---|---|
Utha | 0.683356 | 0.577942 | 0.022012 |
Ohio | 0.230113 | 1.240582 | 0.497071 |
Texas | 0.487803 | 0.044398 | 0.958905 |
Oregon | 0.178136 | 1.201671 | 0.921106 |
f=lambda x: x.max()- x.min()
frame.apply(f)
b 0.505220
d 1.284980
e 1.880011
dtype: float64
frame.apply(f, axis=1)
Utha 0.661344
Ohio 1.010468
Texas 1.446708
Oregon 1.023536
dtype: float64
除了标量以外,传递给apply的函数还可以返回由多个值组成的Series:
def f(x):
return pd.Series([x.min(),x.max()], index=['min','max'])
frame.apply
. | b | d | e |
---|---|---|---|
min | -0.683356 | -1.240582 | -0.921106 |
max | -0.178136 | 0.044398 | 0.958905 |
frame.apply(f,axis=1)
. | min | max |
---|---|---|
Utha | -0.683356 | -0.022012 |
Ohio | -1.240582 | -0.230113 |
Texas | -0.487803 | 0.958905 |
Oregon | -1.201671 | -0.178136 |
如果你想得到frame中各个浮点值的各个格式化字符串,使用applymap
format=lambda x: '%.2f' % x
frame.applymap(format)
. | b | d | e |
---|---|---|---|
Utha | -0.68 | -0.58 | -0.02 |
Ohio | -0.23 | -1.24 | -0.50 |
Texas | -0.49 | 0.04 | 0.96 |
Oregon | -0.18 | -1.20 | -0.92 |
之所以叫applymap,是因为Series中有个函数叫map
frame['e'].map(format)
Utha -0.02
Ohio -0.50
Texas 0.96
Oregon -0.92
Name: e, dtype: objec
rank
rank函数返回从小到大排序的下标,对于平级的数,rank是通过“为各组分配一个平均排名”的方式破坏评级关系
obj = pd.Series([7,-5,7,4,2,0,4])
print (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
最小的为1
根据值在源数据中出现的顺序给出排名
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
也可以按照降序进行排名
obj.rank(ascending=False, method='max')
0 2.0
1 7.0
2 2.0
3 4.0
4 5.0
5 6.0
6 4.0
dtype: float64
最小的是7
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pandas import Series,DataFrame
#虽然pandas的很多函数(如reindex)要求标签唯一,但是并不具有强制性
obj = Series(range(5),index = list('aabbc'))
print obj
#索引是否唯一用is_unique看是否唯一
print obj.index.is_unique
#对于重复值的索引,选取的话返回一个Series,唯一的索引返回一个标量
print obj['a']
#对于DataFrame也是如此
df = DataFrame(np.random.randn(4,3),index = list('aabb'))
print df
print df.ix['b']
#####自己导入数据的时候数据处理之前可以做一下index唯一性等,自己创建DataFrame注意不能这样