使用 Pandas Python 的连续输赢

Posted

技术标签:

【中文标题】使用 Pandas Python 的连续输赢【英文标题】:Winning and losing streak using Pandas Python 【发布时间】:2021-03-04 11:22:24 【问题描述】:

我可以在下面输入熊猫系列(收盘价的每日系列)来复制该功能吗?它计算每日连胜数。

cp = pd.Series(index=range(1,8+1), name='Closing_Price',
    data=[20.00, 20.50, 20.75, 19.75, 19.50, 19.35, 19.35, 19.40])

1    20.00
2    20.50
3    20.75
4    19.75
5    19.50
6    19.35
7    19.35
8    19.40

解释是:

第 2 天的收盘价高于第 1 天的收盘价,因此我们有单日上涨 在第 3 天,价格再次收高,因此我们有 连续两天上涨,即 Streak Duration 值为 2。 在第 4 天,收盘价下跌,给我们带来单日下跌。 Streak Duration 值为负 (-1),因为价格变动是下跌,而不是上涨。 下降趋势在第 5 天和第 6 天继续,我们的Streak Duration 值反映为-2 和-3。 第 7 天收盘价没有变化,因此 Streak Duration 设置为 0,表示既不是上涨也不是下跌。 最后,在第 8 天收盘价再次上涨,使 Streak Duration 值回到 1。

我想我需要 cumsum() 和 groupby。类似的东西

def fxn(series):
    x = series.diff()

但我不知道如何继续

【问题讨论】:

欢迎来到 Stack Overflow。请阅读如何问好questions。确保您的问题涵盖以下 3 个要素:1. 问题陈述 2. 您的代码(应该是 Minimal, Reproducible Example 3. 错误消息(最好是完整的 Traceback 以帮助其他人查看和提供反馈)。 ,请不要发布代码、数据或 Tracebacks 的图像。将其复制并粘贴为文本,然后将其格式化为代码(选择它并输入ctrl-k)...Discourage screenshots of code and/or errors。 ,, How to make good reproducible pandas examples but I'm not sure how to proceed - 所以不是讨论论坛或教程。 我已经解决了这个问题,但是 SO 要求您尝试尝试并发布您的代码以及卡在哪里。将其分解为多个步骤:a) 获取 Closing_Price 中的一系列差异。称其为CPDiff b) 将CPDiff 转换为+1/0/-1 值(正负号函数),称其为CPDiffS c) 然后才考虑CPDiffS 是改变还是保持不变,在d) 最后之前你可以数一数条纹 【参考方案1】:

这可能是答案吗?向@smci 大声疾呼,感谢他们提供了急需和备受赞赏的提示!!

def streak(x):
  c = x.copy()
  c['diff'] = c.diff()
  c['sign'] = c['diff'].apply(func = lambda y: y if not y else y // abs(y))
  grouper = (c['sign'] != c['sign'].shift()).cumsum()
  c['streak'] = c['sign'].groupby(grouper).cumsum()
  return c['streak']

【讨论】:

干得好。 pandas passes dataframes by-reference,所以你不需要.copy()。取决于您将数据框结果分配给什么? @smci 感谢您指出这一点。我还有一个问题,可以请教一些提示吗?我想创建一个函数来查看当天价格变化相对于之前价格变化的大小。此计算称为“百分比排名”或百分位数。这告诉我们回溯期内小于当前值的值的百分比。所以百分比排名是回溯期内小于当前值的值的数量除以值的总数。 例如,如果回溯期为 20 天,那么我们会将今天 2.0% 的回报与前 20 天的每一天的回报进行比较。假设其中三个值小于 2.0%。我们将百分比排名计算为:百分比排名 = 3 / 20 = 0.15 = 15%

以上是关于使用 Pandas Python 的连续输赢的主要内容,如果未能解决你的问题,请参考以下文章

python pandas - 创建一个保持连续值运行计数的列

python怎么连续保存间隔发送的数据

python 在Pandas DataFrame中查找连续日期组

Python Pandas - 查找具有最大聚合值的连续组

Python Pandas:返回连续缺失的工作日日期,并在数据框中缺失日期旁边分配速率

Pandas 中不规则的、不连续的期间