gpt4 book ai didi

python - Pandas :只保留累积变化超过阈值的每一行?

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

我有兴趣提取列值累积至少增加 5 或累积减少至少 5 的行,然后获取这些累积变化的迹象,up_or_down .

例如,假设我想将其应用于以下列 y:

df = pd.DataFrame({'x': range(16), 'y': [1,10,14,12,13,9,4,2,6,7,10,11,16,17,14,11]})

它应该产生:

x   y        # up_or_down
1 10 # +1
6 4 # -1
10 10 # +1
12 16 # +1
15 11 # -1

我的数据框非常大,所以我希望有一种很好的矢量化方式来使用 pandas 的 API 在本地执行此操作,而不是使用 iterrows() 循环遍历它。

最佳答案

这是解决方案的核心

def big_diff(y):
val = y.values
r = val[0]
for i, x in enumerate(val):
d = r - x
if abs(d) >= 5:
yield i, 1 if d < 0 else -1
r = x

然后你可以做这样的事情

slc = np.array(list(big_diff(df.y)))
df_slcd = pd.DataFrame(df.values[slc[:, 0]], df.index[slc[:, 0]], df.columns)
signs = pd.Series(slc[:, 1], df.index[slc[:, 0]], name='up_or_down')

df_slcd

enter image description here

signs

1 1
6 -1
10 1
12 1
15 -1
Name: up_or_down, dtype: int64

pd.concat([df_slcd, signs], axis=1)

enter image description here

关于python - Pandas :只保留累积变化超过阈值的每一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39432140/

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