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