使用多键索引在Deedle中的两个数据帧中添加数字

时间:2015-03-27 07:06:57

标签: c# csv deedle

我是Deedle的新手。我到处寻找可以帮助我完成以下任务的例子:

  1. 使用多列索引数据框(示例中为3 - 日期,ID和标题)
  2. 将多个数据框中的数字列一起添加(示例中的“销售列”)
  3. 分组并在同一天添加销售
  4. 我目前的方法如下。首先 - 由于缺少值,它不起作用,我不知道如何在添加数据帧时轻松处理它们。第二 - 我想知道是否有一种更优雅的方式来做到这一点。

    // Remove unused columns
    var df = dfRaw.Columns[new[] { "Date", "ID", "Title", "Sales" }];
    
    // Index data frame using 3 columns 
    var dfIndexed = df.IndexRowsUsing(r => Tuple.Create(r.GetAs<DateTime>("Date"), r.GetAs<string>("ID"), r.GetAs<string>("Title")) );
    
    // Remove indexed columns
    dfIndexed.DropColumn("Date");
    dfIndexed.DropColumn("ID"); 
    dfIndexed.DropColumn("Title"); 
    
    // Add data frames. Does not work as it will add only
    // keys existing in both data frames
    dfTotal += dfIndexed
    

    表1

    Date,ID,Title,Sales,Market
    2014-03-01,ID1,Title1,1,US
    2014-03-01,ID1,Title1,2,CA
    2014-03-03,ID2,Title2,3,CA
    

    表2

    Date,ID,Title,Sales,Market
    2014-03-02,ID1,Title1,2,US
    2014-03-03,ID2,Title2,2,CA
    

    预期结果

    Date,ID,Title,Sales
    2014-03-01,ID1,Title1,3
    2014-03-02,ID1,Title1,2
    2014-03-03,ID2,Title2,5
    

1 个答案:

答案 0 :(得分:0)

我认为使用元组的方法是有道理的。

有点不幸的是,添加时没有简单的方法来指定默认值! 我能想到的最简单的解决方案是将两个系列重新对齐到同一组键并使用填充操作来提供默认值。使用简单系列作为一个例子,像这样的东西应该做的伎俩:

var allKeys = seris1.Keys.Union(series2.Keys);
var aligned1 = series1.Realign(allKeys).FillMissing(0.0);
var aligned2 = series2.Realign(allKeys).FillMissing(0.0);
var res = aligned1 + aligned2;