Python 根据条件更新dataframe中特定列中的下一行

Python 根据条件更新dataframe中特定列中的下一行,python,pandas,dataframe,Python,Pandas,Dataframe,我正在使用pandas dataframe,我想根据条件更新我的列“信号” 如果值为“1”或“-1”,并且下一行具有相同的数字,则在对列进行迭代时,第二个“1”或“-1”必须更新为0。 最后不应该有两个连续的1或-1 我正在尝试此代码,但没有得到任何更改 for i in df['signal'].iteritems(): if i == 1 : while next() == 1: i=0 elif i == -1: w

我正在使用pandas dataframe,我想根据条件更新我的列“信号”

如果值为“1”或“-1”,并且下一行具有相同的数字,则在对列进行迭代时,第二个“1”或“-1”必须更新为0。 最后不应该有两个连续的1或-1

我正在尝试此代码,但没有得到任何更改

for i in df['signal'].iteritems(): 
    if i == 1 :
        while next() == 1:
            i=0
    elif i == -1:
        while next() == -1:
            i=0

您可以在数据帧中创建一个新列,将数据移位1,并为输出创建一个新列。如果在一行上,原始信号和移位信号相等,这意味着,例如,有两个连续的1(并且您位于第二行)。因此,您将0放在输出列中。否则将复制原始值

您可以从这段代码开始(它似乎适用于您在注释中提供的数据,但您也应该查看其他示例):


您可以在数据帧中创建一个新列,将数据移位1,并为输出创建一个新列。如果在一行上,原始信号和移位信号相等,这意味着,例如,有两个连续的1(并且您位于第二行)。因此,您将0放在输出列中。否则将复制原始值

您可以从这段代码开始(它似乎适用于您在注释中提供的数据,但您也应该查看其他示例):


当有3个连续的1时,您希望得到什么输出?例如,如果列“signal”包含值[1,1,1,-1,1,-1,1,-1,1]?我只应该有这样的结果[1,0,0,1,-1,1,0,0,0,-1,0]“作为示例”,因为此列稍后将帮助我在其他列上设置其他各种计算。当我有两个连续的1或-1时,另一列无法进行真正的计算。@gpweb从来没有连续的1或-1,所以永远不会像你说的那样有3个连续的。我不知道我是否能很好地解释我的问题,但目标是永远不要重复1值或-1,直到它被0打破。这意味着允许我的列中有连续的0。你能帮个忙吗?你应该提供一个输入的例子(df['signal']的内容)和你期望的输出,因为它真的不清楚;signal是我的列,我添加了一列“expected_signal”来解释我的第一个信号应该包含什么:当有3个连续的1时,你期望什么输出?例如,如果列“signal”包含值[1,1,1,-1,1,-1,1,-1,1]?我只应该有这样的结果[1,0,0,1,-1,1,0,0,0,-1,0]“作为示例”,因为此列稍后将帮助我在其他列上设置其他各种计算。当我有两个连续的1或-1时,另一列无法进行真正的计算。@gpweb从来没有连续的1或-1,所以永远不会像你说的那样有3个连续的。我不知道我是否能很好地解释我的问题,但目标是永远不要重复1值或-1,直到它被0打破。这意味着允许我的列中有连续的0。你能帮个忙吗?你应该提供一个输入的例子(df['signal']的内容)和你期望的输出,因为它真的不清楚;signal是我的专栏,我为您添加了一个专栏“expected_signal”,只是为了解释我的第一个信号应该包含什么:
df = pd.DataFrame([1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, -1.0, -1.0, 0.0, 0.0, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0 ])
df['shifted'] = df.shift(1) #add the column with shifted values
df['output'] = df.apply(lambda x: x[0] if x.signal != x.shifted else 0, axis=1)