python - Pandas 按月计算交易数量

标签 python python-3.x pandas pandas-groupby

我有一个数据框,其中包含在 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/

相关文章:

python - 导入错误: No module named 'distutils' in pandas pyinstaller

python - 在给定索引列表的情况下将多行插入数据帧的最快方法(python)

python - 抓取一个要求他们先给你一个 session cookie 的网页

python - 通过多级键解析 JSON 值

python - 我正在用 python 写一个 Telegram Bot

python-3.x - 如何通过 Pandas 导入.data并描述数据?

python - 如何使用 while 循环计算 IP 地址中第一段的长度

python - matplotlib 中的矢量格式热图

python - 使用 asyncio.gather 不会引发内部异常

python pandas 使用 iloc 更改数据框单元格