Python OpenRefine:创建列的移位副本

Python OpenRefine:创建列的移位副本,python,openrefine,grel,Python,Openrefine,Grel,我想知道OpenRefine是否允许您在创建新列时访问其他行中的数据。我怀疑它不是(这将是一个明智的设计原则),但可能有一个黑客围绕 下面是一个可以执行的示例:将一列移动一行 我有下表: ╔═════╦════════╗ ║ row ║ Model ║ ╠═════╬════════╣ ║ 1 ║ Quest ║ ║ 2 ║ DF ║ ║ 3 ║ Waw ║ ║ 4 ║ Strada ║ ╚═════╩════════╝ 我想得到以下结果: ╔═════╦══

我想知道OpenRefine是否允许您在创建新列时访问其他行中的数据。我怀疑它不是(这将是一个明智的设计原则),但可能有一个黑客围绕

下面是一个可以执行的示例:将一列移动一行

我有下表:

╔═════╦════════╗
║ row ║ Model  ║
╠═════╬════════╣
║   1 ║ Quest  ║
║   2 ║ DF     ║
║   3 ║ Waw    ║
║   4 ║ Strada ║
╚═════╩════════╝
我想得到以下结果:

╔═════╦════════╦══════════╗
║ row ║ Model  ║ Previous ║
╠═════╬════════╬══════════╣
║   1 ║ Quest  ║          ║
║   2 ║ DF     ║ Quest    ║
║   3 ║ Waw    ║ DF       ║
║   4 ║ Strada ║ Waw      ║
╚═════╩════════╩══════════╝

现在看来,似乎没有任何变量可以让您访问当前行或记录之外的信息,因此我想知道这种操作是否可行。

不幸的是,Open Refine中没有“column”变量。一种可能的解决方法是将所有数据集转换为一条记录,然后应用一点Python/Jython

例如:

data = row['record']['cells']['Model']['value']
for i, el in enumerate(data):
    if value == el and i !=0:
        return data[i - 1]
放映:


我不知道是否可以用GREL解决问题。

谢谢!我认为这是一个非常明智的设计决策,因为它确保了操作可以独立于上下文应用于行。这意味着,例如,可以使用pyrefine之类的东西对数据流(某种意义上,一个逐渐被发现的表)应用一组OpenRefine操作。我认为这是很多维基数据机器人非常强大的范例。