gpt4 book ai didi

python - Pandas 移位值计算

转载 作者:太空宇宙 更新时间:2023-11-03 14:57:45 27 4
gpt4 key购买 nike

我想创建一个新列,其中包含根据其他列中的移位值计算得出的值。

正如您看到下面的代码,首先我创建了一个时间序列数据。

“价格”是随机生成的时间序列数据,动量是最近 12 个周期的平均动量值。

我想添加一个新列,包含平均“n”动量值的数据,其中“n”对应于df['shift']的值,而不是动量函数中固定的12值,但使用“shift”列中的值。

我该怎么做?

(在下面的例子中,动量是用固定的12来计算的)

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.uniform(low=0.8, high=1.3, size=100).cumprod(),columns = ['price'])
df['shift'] = np.random.randint(5, size=100)+3
df

def momentum(x):
init = 0
for i in range(1, 13):
init = x.price / x.price.shift(i) + init
return init / 12

df['momentum'] = momentum(df)

price shift momentum
0 1.069857 3 NaN
1 0.986563 7 NaN
2 0.809052 5 NaN
3 0.991204 3 NaN
4 0.846159 6 NaN
5 0.717344 4 NaN
6 0.599436 3 NaN
7 0.596711 7 NaN
8 0.543450 4 NaN
9 0.511640 3 NaN
10 0.496865 3 NaN
11 0.460142 4 NaN
12 0.435862 4 0.657192
13 0.410519 4 0.665493
14 0.368428 5 0.640927
15 0.335583 7 0.625128
16 0.313470 7 0.635423
17 0.321265 4 0.704990
18 0.319503 7 0.746885
19 0.365991 4 0.900135
20 0.300793 4 0.766266
21 0.274449 6 0.733104

最佳答案

这是我的方法

def momentum(shift,price,array,index):
if shift > index:
return 0
else:
init = 0
for i in range(1,int(shift)+1):
init += price / array[int(index)-i]
return init



df = pd.DataFrame(np.random.uniform(low=0.8, high=1.3, size=100).cumprod(),columns = ['price'])
df['shift'] = np.random.randint(5, size=100)+3
df['Index'] = df.index
series = df['price'].tolist()


df['momentum'] = df.apply(lambda row: momentum(row['shift'],row['price'],series,row['Index']),axis=1)
print df

关于python - Pandas 移位值计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45386887/

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