deedle - 在 Deedle 中聚合数据帧

标签 deedle

我是 Deedle 的新手。

给定这个数据框

     date       account custodian ticker qty     pnl price

0 -> 1/1/2013   ACCT #1 CUST#1    AAPL   1000   5000    95
1 -> 1/1/2013   ACCT #1 CUST#2    AAPL    200    400    94
2 -> 1/2/2013   ACCT #1 CUST#1    AAPL    100    300    93

我想聚合列 - 总数量/盈亏列和平均价格。我想要类似于下面的输出

     date       account ticker qty     pnl price

0 -> 1/1/2013   ACCT #1 AAPL   1200   5400    94.5
1 -> 1/2/2013   ACCT #1 AAPL    100    300    93

到目前为止我的方法:

let sumCols = df |> Frame.aggregateRowsBy ["date"; "account"; "ticker"] ["pnl"; "qty"] Stats.sum
let avgCols = df |> Frame.aggregateRowsBy ["date"; "account"; "ticker"] ["price"] Stats.mean

我在加入/合并这两个数据框时遇到问题。我收到以下错误。

System.InvalidOperationException:组合向量失败 - 两个向量都有一个值。 在[email protected] (Tuple2 tupledArg) 在 c:\Tomas\Public\Deedle\src\Deedle\Vectors\VectorHelpers.fs 中:第 162 行 在 c:\Tomas\Public\Deedle\src\Deedle\Vectors\ArrayVector 中的 Deedle.Vectors.ArrayVector.ArrayVectorBuilder.Deedle-Vectors-IVectorBuilder-Build[T](VectorConstruction 命令,IVector1[] 参数) .fs:第 198 行

at Deedle.Frame2.Join(Frame2 otherFrame, JoinKind kind, Lookup lookup) in c:\Tomas\Public\Deedle\src\Deedle\Frame.fs:line 272 at .$FSI_0059.main@()

最佳答案

如果 Deedle 框架具有相同名称的列,则无法连接它们。

如果您想加入最后 2 帧,您必须从一帧中提取不常见的列并将其添加到另一帧中。

例如,您可以执行以下操作:

sumCols?price <- avgCols?price

并且 sumCols 框架中包含列价格。

如果您需要更复杂的连接,您可以考虑首先从要获取的列创建一个新框架,然后将其与另一个框架连接,如下例所示:

let df2 = Frame.ofColumns ["price" => avgCols?price]
let df3 = Frame.join JoinKind.Outer sumCols df2

希望它有用。

关于deedle - 在 Deedle 中聚合数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24914635/

相关文章:

f# - Deedle:将时间序列分组在前 3 名和休息中

f# - 如何对 Deedle 中的非唯一列/索引进行左连接

csv - 更改 Deedle Frame 中的数据类型

f# - F#Deedle访问行

csv - 如何将数据从 FSharp.Data.CsvProvider 传递到 Deedle.Frame?

f# - 在 F# 中处理 Deedle 时间序列中的缺失值(三)

F# : getting rows/column names 的 JSON 类型提供程序

macos - XAMARIN 6.3 MacOS 单声道更新 : F# interactive (and more) crashing

f# - 在 F# 中处理 Deedle 时间序列中的缺失值 (1)