Python 如何替换布尔列表序列中的值?
我有这样一份清单:Python 如何替换布尔列表序列中的值?,python,arrays,pandas,list,numpy,Python,Arrays,Pandas,List,Numpy,我有这样一份清单: list_1 = [True, False, True, False, True, True, True, False, False, False, True, True, False] 在此列表中,有一些序列以False开头,以True结尾。我需要帮助以这种方式替换此列表的值: 用-2^k系列替换这些序列的False值。每个序列的最后一个False之后的True值是+2^k,其中k作为值在序列中的位置 其他不属于这些序列的True值将保留值1 输出如下所示: list
list_1 = [True, False, True, False, True, True, True, False, False, False, True, True, False]
在此列表中,有一些序列以False
开头,以True
结尾。我需要帮助以这种方式替换此列表的值:
- 用
系列替换这些序列的-2^k
值。每个序列的最后一个False
之后的False
值是True
,其中+2^k
作为值在序列中的位置李>k
- 其他不属于这些序列的
值将保留值True
李>1
list_2 = [1, -1, 2, -1, 2, 1, 1, -1, -2, -4, 8, 1, -1]
由于您标记了熊猫:
# turn data into series
s = pd.Series(list_1)
# mark the blocks ending with True
blocks = s.shift(fill_value=0).cumsum()
# compute the positions within blocks and raise to power 2
powers = 2**s.groupby(blocks).cumcount()
#output:
np.where(s, 1,-1)*powers.values
输出:
array([ 1, -1, 2, -1, 2, 1, 1, -1, -2, -4, 8, 1, -1])
效果很好。谢谢