我有一个数据框,其中包含在 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 次,因为我们在 1 月进入交易并持有整个月的剩余时间,2 月 1 次,因为我们退出 1 月交易(不算新交易)但一天后我们确实开始了新的交易(假设我们在这个月剩下的时间里什么都没做
我有以下代码来计算分配的变化数量,但我不知道如何有效地按月拆分新交易的数量
longs = (df.long-df.long.shift()).ne(0)
在这种情况下,longs = 4,所以除以 2(每两个“跳动”代表一次交易的生命周期)将得到有效的交易数量
如何统计每月开始的交易数量?
最佳答案
您可以检查一个月内从 False
变为 True
的次数:
s = (df.long & ~df.long.shift().fillna(False)).astype(int)
然后就是 groupby 和 sum:
s.groupby(pd.Grouper(freq='MS')).sum()
2010-01-01 1
2010-02-01 1
Freq: MS, Name: flag, dtype: int32
关于python - Pandas 按月计算交易数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51938042/