以前已經寫過pandas DataFrame applymap()函數html
還有pandas數組(pandas Series)-(5)apply方法自定義函數數組
pandas DataFrame 的 applymap() 函數和pandas Series 的 apply() 方法,都是對整個對象上個各個值進行單獨處理,返回一個新的對象.app
而pandas DataFrame 的 apply() 函數,雖然也是做用於DataFrame的每一個值,可是接受的參數不是各個值自己,而是DataFrame裏各行(或列),返回一個新的行(列):函數
有以下一組數據: 記錄了10個學生在兩次考試的成績:post
grades_df = pd.DataFrame( data={'exam1': [43, 81, 78, 75, 89, 70, 91, 65, 98, 87], 'exam2': [24, 63, 56, 56, 67, 51, 79, 46, 72, 60]}, index=['Andre', 'Barry', 'Chris', 'Dan', 'Emilio', 'Fred', 'Greta', 'Humbert', 'Ivan', 'James'] )
要求把學生的成績轉換成A,B,C,D,E,五個等級,轉換規則以下:url
考分前 20% 的成績獲得Aspa
20% - 50% 的獲得Bcode
50% - 80% 的獲得Chtm
80% - 90% 的獲得D對象
90% - 100% 的獲得E
首先,能夠使用 .qcut() 方法來寫一個按照區間轉換數據值的函數: pandas的qcut()方法
def convert_grades_curve(exam_grades): return pd.qcut(exam_grades, [0, 0.1, 0.2, 0.5, 0.8, 1], labels=['E', 'D', 'C', 'B', 'A'])
而後對整個DataFrame應用這個函數
print grades_df.apply(convert_grades_curve)
exam1 exam2
Andre F F
Barry B B
Chris C C
Dan C C
Emilio B B
Fred C C
Greta A A
Humbert D D
Ivan A A
James B B
可見,DataFrame的apply()方法默認做用於DataFrame的各列.
若是想做用於行,能夠設置參數axis
DataFrame.apply(func,axis=0)