我正在处理一个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