【问题标题】:Calculating a value from a different column and a different row using PETL使用 PETL 从不同的列和不同的行计算值
【发布时间】:2018-11-24 10:22:57
【问题描述】:

我有一个如下所示的表格:

+---------------+------+-----------+
| EffectiveDate | TSV  | MTDReturn |
+===============+======+===========+
| '1994-01-30'  |  100 |      0.04 |
+---------------+------+-----------+
| '1995-02-28'  | None |      0.02 |
+---------------+------+-----------+
| '1992-03-31'  | None |      0.01 |
+---------------+------+-----------+
| '1974-08-30'  | None |      0.06 |
+---------------+------+-----------+

我正在使用PETL 库来尝试填充TSV 值。我可以通过将表格分解为字典列表并对其进行操作来做到这一点,但我被要求仅使用 PETL 来完成此操作。

公式很简单:TSV = previousTSV * (1 + MTDReturn)

我已经查看了aggregation,但没有什么可以将它们分组的。

也许我可以加入一个包含previousTSV 列的表?

【问题讨论】:

  • 能否提供您的源代码和一些输入数据(如果它很大,请使用 github),以便我们进行修改?
  • @Splatmistro:问题应该是最小的、完整的和可验证的,链接没有帮助

标签: python etl petl


【解决方案1】:

这看起来很适合addfieldusingcontext。这将使用接收前一行的函数添加列值(第一行无)。我猜你会使用类似的东西:

def calculate_tsv(prv, cur, nxt):
    if prv is not None:
        return prv.TSV * (1 + cur.MTDReturn)

etl.addfieldusingcontext(table1, 'TSV', calculate_tsv)

【讨论】:

    猜你喜欢
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    相关资源
    最近更新 更多