将 python 脚本转换为 Spotfire Python 数据函数的问题

Issues with coverting a python script into a Spotfire Python Data Function

我有一个非常简单的脚本,只需两步:

  1. 按 A 列和 B 列对数据框进行排序
  2. 创建一个新列 (D),该列是通过在 C 列中标记具有相同值的连续行并在每次行值更改时将标签增加 1 并因此标记相似数据的所有连续组。

我的 Python 脚本在下面并且效果很好,我不想将它作为 Python 数据函数引入 Spotfire 并且在将它连接到输入和输出参数时遇到问题。

原始python脚本

import pandas as pd
import numpy as np
df.sort_values(['ColumnA', 'ColumnB'], ascending=[True, True])
df['ColumnD'] = (df['ColumnC'] != df['ColumnC'].shift(1)).cumsum()

我试图将我的数据函数写成:

import pandas as pd
import numpy as np
df.sort_values([A, B], ascending=[True, True])
D = (C != C.shift(1)).cumsum()

并使 A、B、C 成为“输入”,D 成为输出,但它不起作用。非常感谢任何帮助!

我正在编辑我之前的答案,因为示例数据已经排序,所以隐藏了实际问题。 Spotfire 假定输出列与输入数据 table 的顺序相同。如果数据 table 在数据函数中排序不同,则需要在输出列之前排序回其原始顺序。

所以我创建了一个计算列 ROWID: rowid() ,它也是数据函数的输入。这表示行的 'natural' 顺序。

这是有效的代码:

import pandas as pd
import numpy as np

df=df.sort_values(['A', 'B'], ascending=[True, True])
df['D'] = (df['C'] != df['C'].shift(1)).cumsum()
#re-sort by ROWID before creating the column vector
df=df.sort_values(['ROWID'],ascending=[True])
D=df['D']