gpt4 book ai didi

python - 使用上一行值来计算日志

转载 作者:太空宇宙 更新时间:2023-11-03 20:56:30 25 4
gpt4 key购买 nike

我有一个数据框,如电子表格中所示,它有一个列A

https://docs.google.com/spreadsheets/d/1h3ED1FbkxQxyci0ETQio8V4cqaAOC7bIJ5NvVx41jA/edit?usp=sharing

我一直在尝试创建一个新列,例如A_output,它使用前一行值和当前行值来查找自然对数。

df.apply(custom_function, axix=1) #on a function

但我不确定,如何访问该行的前一个值?

我唯一尝试过的是将值转换为列表并执行我的操作并将其附加回数据帧,如下所示。

output = []
previous_value = 100
for value in df['A'].values:
output.append(np.log(value/previous_value))
previous_value = value

df['A_output'] = output

这将是一项极其昂贵的操作,解决这个问题的最佳方法是什么?

最佳答案

使用rolling()的另一种方式:

import pandas as pd
import numpy as np

data = np.random.normal(loc=5., size=(6, 1))
df = pd.DataFrame(columns=['A'], data=data)

df['output'] = df['A'].rolling(2).apply(lambda x: np.log(x[1]/x[0]))
init_val = 3.
df['output'][0] = np.log(df['A'][0] / init_val) # <-- manually assign value for the first item
print(df)
# A output
# 0 7.257160 0.883376
# 1 4.579390 -0.460423
# 2 4.630148 0.011023
# 3 5.153198 0.107029
# 4 6.004917 0.152961
# 5 6.633857 0.099608

如果您想对多列应用相同的操作:

import pandas as pd
import numpy as np

data = np.random.normal(loc=5., size=(6, 2))
df = pd.DataFrame(columns=['A', 'B'], data=data)

df[['output_A', 'output_B']] = df.rolling(2).apply(lambda x: np.log(x[1]/x[0]))
init_val = 3.
df['output_A'][0] = np.log(df['A'][0] / init_val)
df['output_B'][0] = np.log(df['B'][0] / init_val)
print(df)
# A B output_A output_B
# 0 7.289657 4.986245 0.887844 0.508071
# 1 5.690721 5.010605 -0.247620 0.004874
# 2 5.773812 5.129814 0.014495 0.023513
# 3 4.417981 6.395500 -0.267650 0.220525
# 4 4.923170 5.363723 0.108270 -0.175936
# 5 5.279008 5.327365 0.069786 -0.006802

关于python - 使用上一行值来计算日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55991481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com