如何将自定义函数应用于每行的熊猫数据框[重复]
Posted
技术标签:
【中文标题】如何将自定义函数应用于每行的熊猫数据框[重复]【英文标题】:How to apply custom function to pandas data frame for each row [duplicate] 【发布时间】:2017-03-14 04:55:55 【问题描述】:我想应用一个自定义函数并创建一个名为 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】:您无需DataFrame.apply()
即可获得相同的结果。 Pandas 系列(或数据框列)可以用作 NumPy 函数甚至内置 Python 运算符的直接参数,这些运算符是按元素应用的。在你的情况下,它就像以下一样简单:
import numpy as np
facts['pop2050'] = facts['population'] * np.exp(35 * facts['population_growth'])
这将 population_growth
列中的每个元素相乘,将 numpy 的 exp()
函数应用于该新列 (35 * population_growth
),然后将结果与 population
相加。
【讨论】:
【参考方案2】:你的功能,
def function(x):
// your operation
return x
调用你的函数,
df['column']=df['column'].apply(function)
【讨论】:
【参考方案3】:你快到了:
facts['pop2050'] = facts.apply(lambda row: final_pop(row['population'],row['population_growth']),axis=1)
使用 lambda 可以让您保留函数中列出的特定(有趣)参数,而不是将它们捆绑在一个“行”中。
【讨论】:
【参考方案4】:Apply 将通过轴 = 1 的整行。假设你的两列被称为initial_pop
和growth_rate
def final_pop(row):
return row.initial_pop*math.e**(row.growth_rate*35)
【讨论】:
以上是关于如何将自定义函数应用于每行的熊猫数据框[重复]的主要内容,如果未能解决你的问题,请参考以下文章