zoukankan      html  css  js  c++  java
  • pandas DataFrame apply()函数(1)

    之前已经写过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) 

  • 相关阅读:
    我的算法日志:数据结构之顺序队列与循环队列
    我的算法日志:排序算法之快速排序
    算法:冒泡排序
    算法:桶排序(简易版)
    Android:配置LitePal 3.0
    Android:简单粗暴的二维码生成与扫描
    Linux
    Python
    Linux
    Python
  • 原文地址:https://www.cnblogs.com/liulangmao/p/9342806.html
Copyright © 2011-2022 走看看