在Deedle中聚合数据框架

时间:2014-07-23 15:26:13

标签: 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

我想汇总列 - 总和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(元组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, IVector 1 []参数)在c:\ Tomas \ Public \ Deedle \ src \ Deedle \ Vectors \ ArrayVector.fs:第198行

  

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

1 个答案:

答案 0 :(得分:1)

如果具有相同名称的列,则无法连接Deedle帧。

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

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

sumCols?price <- avgCols?price

您的列价在sumCols框架中。

如果您需要更加柔和的连接,您可以考虑首先从要创建的列创建一个新帧,然后将其与另一个帧连接,如下例所示:

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

我希望它有用。