2

我是 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

我想汇总列 - 合计 qty / pnl 列和平均价格。我想要一个类似于下面的输出

     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:组合向量失败 - 两个向量都有一个值。在 Deedle.VectorHelpers.get_AtMostOne@161-1.Invoke(Tuple 2 tupledArg) in c:\Tomas\Public\Deedle\src\Deedle\Vectors\VectorHelpers.fs:line 162 at Deedle.Vectors.ArrayVector.ArrayVectorBuilder.Deedle-Vectors-IVectorBuilder-Build[T](VectorConstruction command, IVector1[] arguments) in c:\Tomas\Public\Deedle\src\Deedle\Vectors\ArrayVector.fs:line 198

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

4

1 回答 1

2

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

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

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

sumCols?price <- avgCols?price

sumCols并且您在框架中有列价格。

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

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

我希望它有用。

于 2014-10-24T16:50:05.777 回答