您的位置:首页 > 编程语言 > Python开发

python/pandas/numpy数据分析(十)-函数, rank,重复索引

2016-12-28 15:02 751 查看
DataFrame的apply方法,将函数应用到行或者列形成的一维数组上.

frame=pd.DataFrame(np.random.randn(4,3),columns=list('bde'),index=['Utha','Ohio','Texas','Oregon'])
frame


.bde
Utha-0.683356-0.577942-0.022012
Ohio-0.230113-1.240582-0.497071
Texas-0.4878030.0443980.958905
Oregon-0.178136-1.201671-0.921106
np.abs(frame)


.bde
Utha0.6833560.5779420.022012
Ohio0.2301131.2405820.497071
Texas0.4878030.0443980.958905
Oregon0.1781361.2016710.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


.bde
min-0.683356-1.240582-0.921106
max-0.1781360.0443980.958905
frame.apply(f,axis=1)


.minmax
Utha-0.683356-0.022012
Ohio-1.240582-0.230113
Texas-0.4878030.958905
Oregon-1.201671-0.178136
如果你想得到frame中各个浮点值的各个格式化字符串,使用applymap

format=lambda x: '%.2f' % x
frame.applymap(format)


.bde
Utha-0.68-0.58-0.02
Ohio-0.23-1.24-0.50
Texas-0.490.040.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看是否唯一

pri
4000
nt 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注意不能这样
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 数据分析