【问题标题】:Calculate Average Total Range from given Total Range in python pandas?从python pandas的给定总范围计算平均总范围?
【发布时间】:2020-06-16 09:02:19
【问题描述】:

在这张表中,我需要添加一列 Av。 TR 和我想计算 Av。 TR。对于 Av。 TR 计算:-

前 10 天为参考。

所以第 10 天 Av. TR 将是:-

平均TR = 前 10 天 TR 的平均值以及随后几天的平均值。 TR 将是

公式:平均TR = [(前一天 ATR * 9)+(当天 TR)]/10。

我必须按 Av 分组。 TR 按“SYMBOL”也。这该怎么做?我在 pandas 中尝试了滚动功能,但无法达到结果。

 INSTRUMENTS SYMBOL TIMESTAMP TR
 FUTIDX 银行 2020 年 6 月 1 日 729.8
 FUTIDX 银行 2020 年 6 月 2 日 834
 FUTIDX 银行 2020 年 6 月 3 日 1145.2
 FUTIDX 银行 2020 年 6 月 4 日 846.7
 FUTIDX 银行 2020 年 6 月 5 日 812.5
 FUTIDX 银行 2020 年 6 月 8 日 904.6
 FUTIDX 银行 2020 年 6 月 9 日 1014
 FUTIDX 银行 2020 年 6 月 10 日 660
 FUTIDX 银行 2020 年 6 月 11 日 796
 FUTIDX 银行 2020 年 6 月 12 日 1173
 FUTIDX 银行 2020 年 6 月 15 日 969
 FUTIDX 银行 2020 年 6 月 16 日 271
 FUTIDX 漂亮 2020 年 6 月 1 日 207
 FUTIDX 漂亮 2020 年 6 月 2 日 230
 FUTIDX 漂亮 2020 年 6 月 3 日 177.7
: : : :
: : : :
: : : :

我想添加一列 Av。 TR。用于计算 Av。 TR 我在上面提到了公式,我希望它按符号分组。

所以新列 ATR 将是这样的:-

 ATR
第 1 行南
第2行南
第 3 行南
第4行南
第 5 行南
第6行南
第 7 行南
第8行南
第9行南
row10(TR 前 10 行的平均值)
第 11 行(参考上面的公式)
第 12 行(参考上面的公式)
(等等)(等等)

必须按符号分组

【问题讨论】:

  • 能否请您复制并粘贴数据而不是屏幕截图?见:stackoverflow.com/questions/20109391/…
  • 这是一个非常大的文件。我应该发送那个 .csv 文件吗?
  • 您可以将一些示例行复制到堆栈溢出中。粘贴时使用 { } 功能和/或在每行的开头添加 4 个空格。有关如何执行此操作的更多详细信息,请查看链接。
  • 我已经编辑了这个问题。请检查。
  • @AyushAnand 您可以为您拥有的数据集添加预期结果吗?前 9 行的 Av.TR 是多少 - 它们应该是空白还是前一行和当前行的平均值?

标签: python pandas pandas-groupby data-analysis


【解决方案1】:

您应该能够对每个组应用滚动变换。像这样的东西应该能够实现这一点。

df['Av.TR'] = df.groupby('SYMBOL')['TR'].transform(lambda x: x.rolling(10, 1).mean())

如果您希望前 10 行为空白,则

df['Av.TR'] = df.groupby('SYMBOL')['TR'].transform(lambda x: x.rolling(10).mean())

我不太确定,如果这是你想要的。但是结合上述内容,然后使用上一行值应用公式应该可以到达那里。

df['Av.TR'] = df.groupby('SYMBOL')['TR'].transform(lambda x: x.rolling(10).mean())
df['Av.TR'] = np.where(df.shift(1)['Av.TR'].isna(), np.NaN,
                     (df.shift(1)['Av.TR'] * 9 + df['TR']) / 10)

也许有更好的方法!

【讨论】:

  • 这段代码在每一行上做平均。我希望每个 SYMBOL 的前 9 行为空白,并且我想要 av。仅在第 10 行和第 10 行之后,我在问题中提到了不同的 ATR 计算公式。
  • @AyushAnand 如果您希望前 10 行空白,则可以删除 .rolling() 函数的 min_period=1 参数。 ATR 计算公式是什么意思 - 你从哪里得到“前一天 ATR”? “ATR”和“Av.TR”一样吗?
  • ya ATR 与 Av 相同。 TR 和第 10 行之后有一个不同的公式。所以在每个 SYMBOL 的第 10 行之后,我们必须应用该公式。 AV。 TR = [(前一天 ATR * 9)+(当天 TR)]/10。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多