Pandas 复杂公式计算

2020-03-22  本文已影响0人  Noza_ea8f

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

公式越复杂,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
上一篇下一篇

猜你喜欢

热点阅读