gpt4 book ai didi

Python pandas 循环值以两列为条件

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

在我的数据框“数据”中,我有两列“趋势”和“rtrend”

trend 的值为 -1、0 和 1。

def newfunc(a):

j = -1

for i in a:

j = j+1
x = (j-1)

if data.iloc[j]['trend'] != 0:

return data.iloc[j]['trend']

if data.iloc[j]['trend'] == 0:

return data.iloc[x]['rtrend']

如果 trend 等于 -1 或 1,那么我想将 rtrend 列值设置为等于 trend

如果 trend 等于 0,则将 rtrend 设置为等于数据框中上方出现的该系列中的最后一个值。

data['rtrend'] = newfunc(data['trend'])

它当前返回的是整个系列的 0。

请有人能指出我正确的方向吗?我相信一定有更好的方法来做到这一点。 (我已经尝试过 np.where() ,但似乎没有达到我想要的效果)。

最佳答案

不要执行过程性的慢 for 循环。做向量化的方法。只需将非零数据复制到新的 rtrend 列中,然后向前填充数据:

df['rtrend'] = df[df.trend!=0]['trend']

df
Out[21]:
trend b c rtrend
a -1.0 1.0 -1.0 -1.0
c 0.0 -1.0 1.0 NaN
e 1.0 -1.0 -1.0 1.0
f -1.0 1.0 -1.0 -1.0
h -1.0 1.0 1.0 -1.0

df['rtrend'].ffill()
Out[22]:
a -1.0
c -1.0
e 1.0
f -1.0
h -1.0
Name: rtrend, dtype: float64

关于Python pandas 循环值以两列为条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41786349/

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