美文网首页
Pandas 复杂公式计算

Pandas 复杂公式计算

作者: Noza_ea8f | 来源:发表于2020-03-22 16:42 被阅读0次

    这个应该是非常实用的!!!

    公式越复杂,pandas越比Excel好用;
    下面是一个计算长方形外接圆面积的例子:

    import pandas as pd
    import numpy as np
    
    
    # 定义复杂函数
    def gei_circumcircle_area(w, h):
        '''
        求外接圆面积的公式
        :param w: 宽
        :param h: 高
        :return: 外接圆面积
        '''
        # 计算圆的半径
        r = np.sqrt(w ** 2 + h ** 2) / 2
        return r ** 2 * np.pi
    
    
    # 定义一个装饰函数
    def wrapper(row):
        # 因为pandas是一行一行进行扫描,然后把数据作为一个列表传给函数
        return gei_circumcircle_area(row['width'], row['height'])
    
    
    df = pd.read_excel('data/复杂函数计算.xlsx', index_col='ID')
    # 增加外接圆面积列
    df['外接圆面积'] = df.apply(wrapper, axis=1)
    print(df)
    

    装饰函数有时候容易引起误解;

    尤其是本来需要传参,但是在apply里面似乎并没有参数传给wrapper,那么我只能猜测apply自动提供了传参;
    如果觉得不习惯,还可以使用lambda表达式,尽管我也不喜欢lambda;

    df['外接圆面积'] = df.apply(lambda row: gei_circumcircle_area(row['width'], row['height']), axis=1)
    

    不过看起来好理解一些了!

    还有一种更人性化的解决方案:

    df['外接圆面积'] = gei_circumcircle_area(df['width'], df['height'])
    

    这是pandas的一个特别之处;
    它的哲学是因为列于列之间的每个元素都进行相同的运算;
    那么可以把列作为参数进行传递,意思就是这些列的元素进行同样的处理;

    列与列之间的计算,非常简单!

    df['周长'] = (df['width'] + df['height']) * 2
    

    相关文章

      网友评论

          本文标题:Pandas 复杂公式计算

          本文链接:https://www.haomeiwen.com/subject/padvyhtx.html