映射一列的值
Map over values of one column
我想映射数据框 Title
列的值。
我想出的解决方案如下:
df.Columns.[ [ "Title"; "Amount" ] ]
|> Frame.mapCols(fun k s ->
if k = "Title"
then s |> Series.mapValues (string >> someModif >> box)
else s.Observations |> Series)
由于 s
是 ObjectSeries<_>
类型,我必须将其转换为 string
,然后对其进行修改 box
。
是否有推荐的方法来映射单个列的值?
您可以使用 GetColumn:
df.GetColumn<string>("Title")
|> Series.mapValues(someModif)
或更多 F# 风格:
df
|> Frame.getCol "Title"
|> Series.mapValues(string >> someModif)
另一种选择是添加一个 TitleMapped
列:
df?TitleMapped <- df?Title |> Series.mapValues (...your mapping fn...)
...然后用 df |> Frame.dropCol "Title"
丢弃 Title
列(如果您不关心它是否保留,则不要打扰)。
或者,如果您不喜欢 <-
的 "imperativeness",您可以这样做:
df?Title
|> Series.mapValues (...your mapping fn...)
|> fun x -> Frame( ["Title"], [x] )
|> Frame.join JoinKind.Left (df |> Frame.dropCol "Title")
在某些情况下,您可能希望映射特定列的值并将映射的列保留在框架中。假设我们有一个名为 someFrame 的框架,它有 2 列(Col1 和 Col2)并且我们想要转换 Col1(例如,Col1 + Col2),我通常做的是:
someFrame
|> Frame.replaceCol "Col1"
(Frame.mapRowValues (fun row ->
row.GetAs<float>("Col1") + row.GetAs<float>("Col2"))
someFrame)
如果您想创建一个新列而不是替换它,您所要做的就是更改 "addCol" 的 "replaceCol" 方法并为该列选择一个新名称而不是 "Col1" 给定的例子。我不知道这是否是最有效的方法,但到目前为止它对我有用。
我想映射数据框 Title
列的值。
我想出的解决方案如下:
df.Columns.[ [ "Title"; "Amount" ] ]
|> Frame.mapCols(fun k s ->
if k = "Title"
then s |> Series.mapValues (string >> someModif >> box)
else s.Observations |> Series)
由于 s
是 ObjectSeries<_>
类型,我必须将其转换为 string
,然后对其进行修改 box
。
是否有推荐的方法来映射单个列的值?
您可以使用 GetColumn:
df.GetColumn<string>("Title")
|> Series.mapValues(someModif)
或更多 F# 风格:
df
|> Frame.getCol "Title"
|> Series.mapValues(string >> someModif)
另一种选择是添加一个 TitleMapped
列:
df?TitleMapped <- df?Title |> Series.mapValues (...your mapping fn...)
...然后用 df |> Frame.dropCol "Title"
丢弃 Title
列(如果您不关心它是否保留,则不要打扰)。
或者,如果您不喜欢 <-
的 "imperativeness",您可以这样做:
df?Title
|> Series.mapValues (...your mapping fn...)
|> fun x -> Frame( ["Title"], [x] )
|> Frame.join JoinKind.Left (df |> Frame.dropCol "Title")
在某些情况下,您可能希望映射特定列的值并将映射的列保留在框架中。假设我们有一个名为 someFrame 的框架,它有 2 列(Col1 和 Col2)并且我们想要转换 Col1(例如,Col1 + Col2),我通常做的是:
someFrame
|> Frame.replaceCol "Col1"
(Frame.mapRowValues (fun row ->
row.GetAs<float>("Col1") + row.GetAs<float>("Col2"))
someFrame)
如果您想创建一个新列而不是替换它,您所要做的就是更改 "addCol" 的 "replaceCol" 方法并为该列选择一个新名称而不是 "Col1" 给定的例子。我不知道这是否是最有效的方法,但到目前为止它对我有用。