Python:在apply中使用行号

2024-05-15 11:44:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我只是从熊猫开始,我遇到了以下问题: 我想用中的行号数据框应用()以便计算(1+0.05)^(行号),例如: (1+0.05)^0在第一行,(1+0.05)^1在第二行,(1+0.05)^2在第三行等等。。。。你知道吗

我尝试了以下操作,但get AttributeError:“int”对象没有属性“name”

import pandas as pd

considered_period_years = 60
start_year = 2019
TDE = 0.02
year = list(range(start_year,start_year+considered_period_years))

df = pd.DataFrame(year, columns = ['Year'])
df.insert(0, 'Year Number', range(0,60), allow_duplicates = False)
df.insert(2, 'Investition', 0, allow_duplicates = False)

df['Investition2'] = df['Investition'].apply(lambda x: x*(1+TDE)**x.name)

有什么想法吗?你知道吗

敬约翰


Tags: namedfrangeyearstartperiodpdinsert
2条回答

欢迎来到熊猫。熟悉矢量化函数。矢量化函数背后的基本思想是,在没有显式循环的情况下,将操作应用于数组中的每个元素。例如:

x + 1

意思是“将1添加到x中的元素”。你知道吗

类似地:

x * y

意思是“成对地将x中的每个元素乘以y中的每个元素”。你知道吗

实际上,矢量化函数是使用高度优化的C循环实现的,因此它们既快速又方便。你知道吗

就你而言:

df['Investition2'] = (1+TDE)**df.index
  • 您可以创建一个自定义函数(foo在我们的例子中)来访问row.name,因为您使用的是df['Investitions2'],它会给您一个序列。和apply序列将遍历其值。你知道吗
import pandas as pd

considered_period_years = 60
start_year = 2019
TDE = 0.02
year = list(range(start_year,start_year+considered_period_years))

df = pd.DataFrame(year, columns = ['Year'])
df.insert(0, 'Year Number', range(0,60), allow_duplicates = False)
df.insert(2, 'Investition', 0, allow_duplicates = False)

def foo(row):
    return row['Investition']*(1+TDE)**row.name

df['Investition2'] = df.apply(lambda x: foo(x), axis=1)
  • 另一种选择是使用itertuplesiterrows。你知道吗

相关问题 更多 >