如何使用Wolfram Mathematica修改列中的数据?

我正在处理一个Dataset对象,其中包含一个名为Property的列。

数据如以下图片所示:

这种类型的数据列

根据范围,我希望分配一个新值,并最终替换整个相关列。例如,如果范围是500-5000,我希望得到值1;如果是5000-50000,我希望赋值2,依此类推。


回答:

据我理解,你想通过修改数据集来重新编码其中的一列。据我所知,数据集并不是真正设计为可变类型的。如果你能接受这一点,这里有两种方法可以继续进行。

首先,我们来获取一些人造数据。

ds = Dataset[<|"x" -> RandomInteger[10],      "y" -> Interval[{10^#, 10^(# + 1)}]|> & /@ Range[5]]

现在假设我们想用函数f重新编码第二列:

ds[All, {2 -> f}]

请注意,原始数据集没有改变。(通常这是件好事。)这里有一个可以尝试的示例函数。

f[x_Interval] := Log[10, x[[1, 1]]]ds[All, {2 -> f}]

现在,这个方法的一个大问题是,你的新数据集有一列名称完全相同但解释完全不同。如果这让你感到困扰,你可以选择用一个新名称添加到数据集中。

Append[#, "y2" -> f[#y]] & /@ ds

编辑:

那些美元符号怎么办?除非你展示给我们一个条目的完整形式,我只能猜测。所以我猜测以下人造数据足够接近以供参考:

ds = Dataset[<|"x" -> RandomInteger[10],  "y" -> Quantity[Interval[{10^#, 10^(# + 1)}], "USDollars"]|> & /@ Range[5]]

这意味着我们需要对f做一个小改动:

f[Quantity[Interval[{x_, _}], _]] := Log[10, x]

然后我们可以像之前一样替换或添加:

ds[All, {2 -> f}]Append[#, "y2" -> f[#y]] & /@ ds

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注