首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Np.where(x后跟y)

Np.where(x后跟y)
EN

Stack Overflow用户
提问于 2022-08-10 12:56:47
回答 2查看 46关注 0票数 -1

我有一个带有1(例如) (见截图)块的列的熊猫数据

我想创建另一列,它只在每个块的开头(第一个单元格)和结束(最后一个单元格)发出信号。因此,当0后面跟着1,1后面跟着0时,则为true。

例如,在一个值为[0,1,1,1,1,0]的列中,我希望获得另一列,如[0,1,0,0,1,0]

我想我可以使用np.where,但是我不知道如何实现相应的条件。我试过这样做:df['output'] = np.where(df['signal'].rolling(2).mean() == 0.5, 1, 0) --它可以很好地向第一个单元发出信号,但是输出列中的信号与信号列相比移动了。

你能帮帮我吗?

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-10 13:11:50

以下是单行解决方案:

代码语言:javascript
复制
import pandas as pd
import numpy as np

df = pd.DataFrame(data=[0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0], columns=['signal'])

# Solution
df['output'] = np.where((df['signal'].diff().eq(1)) | (df['signal'].diff().shift(-1) == -1), True, False)
票数 0
EN

Stack Overflow用户

发布于 2022-08-10 13:07:20

您可以使用np.absnp.diff的组合,并将结果转换为布尔数组。

例如,如果您的序列是x = [0,0,0,1,1,0,0]

代码语言:javascript
复制
diffs = np.diff(x) # has value [0,0,-1,0,1,0]
abs_diffs = np.abs(diffs) # has value [0,0,1,0,1,0]
boolean_array = abs_diffs == 1 # [False, False, True, False, True, False]

注意,这个数组的长度比原始数组少一个,您需要确定序列对于列表中的第一个/最后一个元素意味着什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73306754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档