python - 将 python 脚本转换为 Spotfire Python 数据函数的问题
问题描述
我有一个非常简单的脚本,分为两个步骤:
- 按 A 列和 B 列对数据框进行排序
- 创建一个新列 (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 假定输出列与输入数据表的顺序相同。如果数据表在数据函数中的排序方式不同,则需要在输出列之前将其排序回其原始顺序。
所以我创建了一个计算列 ROWID: rowid() ,它也输入到数据函数中。这表示行的“自然”顺序。
这是有效的代码:
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']
推荐阅读
- android-recyclerview - 当我在我的列表中添加 4-5 个项目时,我的列表在按日期排序后按字母顺序排序
- vb.net - 当从 UI 调用的进度条正在执行后台工作时,我如何释放父 UI
- html - 缩放时 div 与其他 div 重叠的问题
- kendo-ui - 'transferTo' 和 'transferAllTo' kendoListBox 工具栏工具在 vue 包装器中不起作用
- html - 如何将图像与 html 并排放置?我还是初学者
- azure-active-directory - 使用 Azure AD Graph API 更改我的个人资料
- python - 在 Python 中格式化单词列表,然后将它们绘制到 Pygame 中的特定位置
- react-native - 反应导航默认背景颜色
- node.js - Node.js:如何在不重新启动服务器的情况下更改日志级别?
- elasticsearch - 多级优化的弹性搜索聚合查询