Python 如何将自定义函数应用于每行的数据帧

Python 如何将自定义函数应用于每行的数据帧,python,pandas,Python,Pandas,我想应用一个自定义函数并创建一个名为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)) d

我想应用一个自定义函数并创建一个名为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)

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

应用将以轴=1的方式沿整行传递给您。假设您的两列分别为
initial\u pop
growth\u rate

def final_pop(row):
    return row.initial_pop*math.e**(row.growth_rate*35)
你就快到了:

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

使用lambda可以保留函数中列出的特定(有趣)参数,而不是将它们捆绑在一行中。

无需使用
DataFrame.apply()。Pandas系列(或dataframe列)可以用作NumPy函数的直接参数,甚至可以用作内置Python运算符,这些运算符是按元素应用的。在您的情况下,它非常简单,如下所示:

import numpy as np

facts['pop2050'] = facts['population'] * np.exp(35 * facts['population_growth'])
这会将列
population\u growth
中的每个元素相乘,将numpy的
exp()
函数应用于该新列(
35*population\u growth
),然后将结果与
population
函数相加

def function(x):
  // your operation
  return x
将您的函数称为

df['column']=df['column'].apply(function)

请添加更多解释这是使用Pandas时推荐的解决方案。这并不能解决问题。要回答原始问题,您需要将参数“axis=1”传递到应用方法中。您能解释一下使用刚才的应用与使用下面的@Karnage和lambda之间的区别吗?这两者有什么好处?您的解决方案似乎也可以作为
facts['pop2050']=facts.apply(lambda x:final_pop(x),axis=1)