1. 程式人生 > >pandas DataFrame apply()函數(1)

pandas DataFrame apply()函數(1)

mes tle 10個 dataframe color dex blog labels 定義函數

之前已經寫過pandas DataFrame applymap()函數

還有pandas數組(pandas Series)-(5)apply方法自定義函數

pandas DataFrame 的 applymap() 函數和pandas Series 的 apply() 方法,都是對整個對象上個各個值進行單獨處理,返回一個新的對象.

而pandas DataFrame 的 apply() 函數,雖然也是作用於DataFrame的每個值,但是接受的參數不是各個值本身,而是DataFrame裏各行(或列),返回一個新的行(列):

有如下一組數據: 記錄了10個學生在兩次考試的成績:

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,五個等級,轉換規則如下:

考分前 20% 的成績得到A

20% - 50% 的得到B

50% - 80% 的得到C

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)

pandas DataFrame apply()函數(1)