gpt4 book ai didi

python - Pandas 数据帧调用函数中的回顾/转移

转载 作者:太空狗 更新时间:2023-10-30 01:58:20 25 4
gpt4 key购买 nike

如果我有以下数据框:

  date       A     B    M     S
20150101 8 7 7.5 0
20150101 10 9 9.5 -1
20150102 9 8 8.5 1
20150103 11 11 11 0
20150104 11 10 10.5 0
20150105 12 10 11 -1
...

如果我想按以下规则创建另一列“成本”:

  1. 如果 S < 0,成本 = (M-B).shift(1)*S
  2. 如果 S > 0,成本 = (M-A).shift(1)*S
  3. 如果 S == 0,成本=0

目前,我正在使用以下功能:

def cost(df):
if df[3]<0:
return np.roll((df[2]-df[1]),1)*df[3]
elif df[3]>0:
return np.roll((df[2]-df[0]),1)*df[3]
else:
return 0
df['cost']=df.apply(cost,axis=0)

还有其他方法吗?我可以以某种方式在用户定义的函数中使用 pandas shift 函数吗?谢谢。

最佳答案

这样做通常代价高昂,因为当您应用 用户定义的函数时,您将失去矢量速度优势。相反,如何使用 the numpy version of the ternary operator :

import numpy as np

np.where(df[3] < 0,
np.roll((df[2]-df[1]),1),
np.where(df[3] > 0,
np.roll((df[2]-df[0]),1)*df[3]
0))

(当然是赋值给df['cost'])。

关于python - Pandas 数据帧调用函数中的回顾/转移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30152214/

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