pandas DataFrame apply()函數(1)

來源:互聯網
上載者:User

標籤:http   bsp   htm   col   自訂   定義函數   學生   app   mes   

之前已經寫過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 exam2Andre       F     FBarry       B     BChris       C     CDan         C     CEmilio      B     BFred        C     CGreta       A     AHumbert     D     DIvan        A     AJames       B     B

可見,DataFrame的apply()方法預設作用於DataFrame的各列.

如果想作用於行,可以設定參數axis

 DataFrame.apply(func,axis=0) 

pandas DataFrame apply()函數(1)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.