我有一个数据框,其中有信号要输入/退出第long
列中的交易,索引为日期。 long
看起来像这样(True值表示您持有职位,False表示您不再持有职位):
2010-01-04 False
2010-01-05 False
2010-01-06 False
2010-01-07 False
2010-01-08 False
2010-01-11 False
2010-01-12 False
2010-01-13 False
2010-01-14 True
2010-01-15 True
2010-01-19 True
2010-01-20 True
2010-01-21 True
2010-01-22 True
2010-01-25 True
2010-01-26 True
2010-01-27 True
2010-01-28 True
2010-01-29 True
2010-02-01 True
2010-02-02 True
2010-02-03 True
2010-02-04 True
2010-02-05 True
2010-02-08 True
2010-02-09 False
2010-02-10 True
2010-02-11 True
2010-02-12 False
2010-02-16 False
所以对于我的数据,我应该得到类似
的输出2010-01 1
2010-02 1
自我们在一月份开始交易并在整个月的整个剩余时间内保持1月1日以来,自我们退出一月份交易(不视为新交易)以来一直保持2月1日,但是一天之后我们确实进行了一项新交易(假设我们在本月的剩余时间中什么都没做
我有以下代码来计算分配变化的数量,但是我不知道如何有效地按月划分新交易的数量
longs = (df.long-df.long.shift()).ne(0)
在这种情况下,多头= 4,因此除以2(每两个“点”代表交易的生命周期)将为我提供有效的交易次数
如何计算每月开始的交易数量?
答案 0 :(得分:1)
您可以使用以下方法检查一个月内从False
到True
的旅行次数:
s = (df.long & ~df.long.shift().fillna(False)).astype(int)
然后仅分组和求和:
s.groupby(pd.Grouper(freq='MS')).sum()
2010-01-01 1
2010-02-01 1
Freq: MS, Name: flag, dtype: int32