【问题标题】:Winning and losing streak using Pandas Python使用 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) 最后之前你可以数一数条纹

标签: python pandas


【解决方案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%
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-12
  • 1970-01-01
  • 2020-05-29
  • 1970-01-01
  • 2022-11-27
  • 2019-05-16
  • 2012-10-09
相关资源
最近更新 更多