gpt4 book ai didi

python - 如何确定 Pandas 列中的值 'stability'?

转载 作者:行者123 更新时间:2023-12-01 12:03:23 26 4
gpt4 key购买 nike

我有一列包含这样的数据:

[ 0, +1, +1, +1, 0, +1, -1, -1, 0, -1, -1, -1, -1, +1, +1, -1, +1, +1, +1, +1, +1, +1, +1, 0]

我想要以下输出:

[ 0, +1, +1, +1, 0,  0,  0,  0, 0, -1, -1, -1, -1,  0,  0,  0, +1, +1, +1, +1, +1, +1, +1, 0]

让我解释一下:

在源列中,数据可以是+1、-1或0。

在输出中,连续出现 3 次或更多次的 +1 和 -1 可以保留;那些没有的,必须转换为 0。

我不知道如何将其作为向量运算。我想我可以开始将每个值与前一个值进行比较,例如:

groupby(data.eq(data.shift()).cumsum()).cumcount()

但我不知道如何构建输出序列。

我是 Pandas 的轻度用户,我并不精通可用的工具。

最佳答案

通过检查移位的 Series 是否不等于其自身并采用 cumsum 并计算每个组的大小来形成连续的组。

然后仅保留零个组或高于阈值的组并将其余组归零(where + fillna)。

l = [0,1,1,1,0,1,-1,-1,0,-1,-1,-1,-1,1,1,-1,1,1,1,1,1,1,1,0]

s = pd.Series(l)
m = s.groupby(s.ne(s.shift()).cumsum()).transform('size')
s = s.where(s.eq(0) | m.ge(3)).fillna(0).astype(int)

s.tolist()
[0, 1, 1, 1, 0, 0, 0, 0, 0, -1, -1, -1, -1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0]

或者因为在这种情况下您的填充值与您不想更改的值相同:

s = s.where(s.groupby(s.ne(s.shift()).cumsum()).transform('size').ge(3), 0)

关于python - 如何确定 Pandas 列中的值 'stability'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59902855/

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