如何将自定义函数应用于每个

2024-05-13 02:28:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我想应用一个自定义函数并创建一个名为population2050的派生列,它基于我的数据框中已经存在的两列。

import pandas as pd
import sqlite3
conn = sqlite3.connect('factbook.db')
query = "select * from facts where area_land =0;"
facts = pd.read_sql_query(query,conn)
print(list(facts.columns.values))

def final_pop(initial_pop,growth_rate):
    final = initial_pop*math.e**(growth_rate*35)
    return(final)

facts['pop2050'] = facts['population','population_growth'].apply(final_pop,axis=1)

当我运行上面的代码时,我得到一个错误。我没有正确使用“应用”功能吗?


Tags: 数据函数importrateconnquerypopsqlite3
3条回答

你就快到了:

facts['pop2050'] = facts.apply(lambda row: final_pop(row['population'],row['population_growth']),axis=1)

使用lambda允许您保留函数中列出的特定(有趣的)参数,而不是将它们捆绑在一个“行”中。

“应用”将沿整行传递,轴为1。假设您的两个列名为initial_popgrowth_rate,则进行如下调整

def final_pop(row):
    return row.initial_pop*math.e**(row.growth_rate*35)

您可以在不需要DataFrame.apply()的情况下获得相同的结果。Pandas系列(或dataframe列)可以用作NumPy函数的直接参数,甚至可以用作内置的Python运算符,这些运算符是按元素应用的。在您的情况下,它简单如下:

import numpy as np

facts['pop2050'] = facts['population'] * np.exp(35 * facts['population_growth'])

这将使列population_growth中的每个元素相乘,将numpy的exp()函数应用于该新列(35 * population_growth),然后使用population添加结果。

相关问题 更多 >