1

我是迪德尔的新手。我到处寻找可以帮助我完成以下任务的示例:

  1. 使用多列索引数据框(示例中为 3 - 日期、ID 和标题)
  2. 将多个数据框中的数字列一起添加(示例中的销售列)
  3. 将同一天发生的销售分组并加在一起

我目前的方法如下。首先 - 由于缺少值,它不起作用,我不知道如何在添加数据帧时轻松处理它们。第二 - 我想知道是否有更好更优雅的方式来做到这一点。

// 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
4

1 回答 1

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;
于 2015-04-25T01:11:12.243 回答