如何将自定义函数应用于每行的熊猫数据框[重复]

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_popgrowth_rate

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

【讨论】:

以上是关于如何将自定义函数应用于每行的熊猫数据框[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义列顺序(在分类上)应用于熊猫箱线图?

Spark scala Dataframe:如何将自定义类型应用于现有数据框?

熊猫数据框在更改一列时每行重复 5 次

如何一次将函数应用于熊猫数据框中的多个列

熊猫有效地将groupby函数应用于每一列[重复]

熊猫将 lambda 应用于整个数据框 [重复]