Python 如何将自定义函数应用于每行的数据帧
我想应用一个自定义函数并创建一个名为population2050的派生列,该列基于数据框中已经存在的两列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
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)