原文地址:https://github.com/wk2014/PandasLearnClass/blob/master/DataFrame.Apply.ipynb
from pandas import DataFrame, Series
import pandas as pd
import numpy as np
frame = DataFrame(np.random.randn(4,3),columns=list('bde'),index=['Utah','Ohio','Texas','Oregon'])
frame
#numpy 的 ufuncs(元素级数组方法) 可用于操作pandas 对象
np.abs(frame)
np.round(frame,decimals=2)
#元素级python函数应用
format = lambda x: '%.2f' % x
frame.applymap(format)
format
frame['e'].map(format)
沿行广播,操作列
#将函数应用到由各行或列所形成的一维数组上。==>frame.apply(f)
#1.返回元素值
f = lambda x: x.max() - x.min()
#沿行广播,操作列
frame.apply(f)
#沿列广播,操作行对象
frame.apply(f,axis=1)
#return 普通 Series 对象
def f2(x):
return Series([x.min(),x.max()],index=['min','max'])
frame.apply(f2)
#return MultiIndex Series 对象
def f3(x):
mIndex = pd.MultiIndex(levels=[['max','min'],['city','value']],labels=[[0,0,1,1],[0,1,0,1]])
se= Series([x.argmax(),x.max(),x.argmin(),x.min()],index=mIndex)
return se
frame.apply(f3)
#return MultiIndex Series 对象
def f3(x):
mIndex = pd.MultiIndex(levels=[['max','min'],['city','value']],labels=[[0,0,1,1],[0,1,0,1]])
se= Series([x.argmax(),x.max(),x.argmin(),x.min()],index=mIndex)
return se
frame.apply(f3).unstack()
b | d | e | ||||
---|---|---|---|---|---|---|
city | value | city | value | city | value | |
max | Ohio | 1.61143 | Ohio | 0.149355 | Oregon | 0.52336 |
min | Oregon | -0.496996 | Texas | -1.42714 | Texas | -1.76419 |