我想应用自定义函数并创建一个名为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)
Run Code Online (Sandbox Code Playgroud)
当我运行上面的代码时,我收到一个错误.我没有正确使用'apply'功能吗?
Bou*_*oud 12
Apply将沿着整个行传递,轴= 1.假设你的两列被调用initial_pop
,这样调整growth_rate
def final_pop(row):
return row.initial_pop*math.e**(row.growth_rate*35)
Run Code Online (Sandbox Code Playgroud)
小智 9
你的功能,
def function(x):
// your operation
return x
Run Code Online (Sandbox Code Playgroud)
将您的功能称为,
df['column']=df['column'].apply(function)
Run Code Online (Sandbox Code Playgroud)
小智 6
你几乎在那里:
facts['pop2050'] = facts.apply(lambda row: final_pop(row['population'],row['population_growth']),axis=1)
Run Code Online (Sandbox Code Playgroud)
使用lambda允许您保留函数中列出的特定(有趣)参数,而不是将它们捆绑在"行"中.
您无需即可获得相同的结果DataFrame.apply()
。Pandas系列(或数据框列)可用作NumPy函数的直接参数,甚至可用作内置Python运算符(直接应用于元素)。就您而言,它很简单,如下所示:
import numpy as np
facts['pop2050'] = facts['population'] * np.exp(35 * facts['population_growth'])
Run Code Online (Sandbox Code Playgroud)
这会将列中的每个元素相乘population_growth
,将numpy的exp()
函数应用于该新列(35 * population_growth
),然后将结果与相加population
。
归档时间: |
|
查看次数: |
24312 次 |
最近记录: |