Python 连续的TRUE';每四个季度轮班一次

Python 连续的TRUE';每四个季度轮班一次,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我有以下数据帧: Quarter Tic var 0 AAL False 1 AAL True 2 AAL True 3 AAL False 4 MSFT True 5 MSFT True 6 MSFT False 7 MSFT False 8 MSFT False 9

我有以下数据帧:

Quarter      Tic  var
0            AAL  False
1            AAL  True
2            AAL  True
3            AAL  False
4            MSFT True
5            MSFT True
6            MSFT False
7            MSFT False
8            MSFT False
9            MSFT True
10           MSFT True
11           MSFT False
我想计算去年同一季度中连续几个季度的真实值(4个周期的变化)和相同的tic值,并将其作为一个新列。所以,我想对tic的每个唯一值都这样做。所需输出为:

Quarter      tic  var    output
0            AAL  False  0
1            AAL  True   1
2            AAL  True   1
3            AAL  False  0
4            MSFT True   1
5            MSFT True   1
6            MSFT False  0
7            MSFT False  0
8            MSFT False  0
9            MSFT True   2
10           MSFT True   1
11           MSFT False  0

我应该如何做到这一点?

您可以尝试
groupby

quarters = np.arange(len(df))%4
blocks = (1-df['var'].astype(int)).groupby(quarters).cumsum()
df['output'] = df['var'].astype(int).groupby([blocks,quarters]).cumsum()
输出:


请您与我们分享您目前掌握的代码,并解释您的困境。您的输出没有显示您正在寻找的模式。。你介意在这里放点灯吗?哦,我知道你现在想要什么…是按索引分组的吗?您是否正在向groupby函数发送?@adirabargil按相同长度的数组分组。我正在将
[0,1,2,3,0,1,2,3,…]
传递给groupby,这表示我要按
4
的步骤对行进行分组。无论如何,您应该删除错误行中的值。@QuangHoang首先感谢您的帮助。不过,您的输出与所需的输出之间存在一些细微的差异。例如,第6季度的输出应该为0,但它给出了1@t.pellegrom对不起,我错过了连续的部分。请参阅更新的答案。
    Quarter    var  output
0         0  False       0
1         1   True       1
2         2   True       1
3         3  False       0
4         4   True       1
5         5   True       2
6         6  False       0
7         7  False       0
8         8  False       0
9         9   True       3
10       10   True       1
11       11  False       0