Я новичок в Deedle. Я искал всюду, ища примеры, которые могут помочь мне выполнить следующую задачу:
Мой нынешний подход приведен ниже. Прежде всего - это не работает из-за недостающих значений, и я не знаю, как легко их обрабатывать при добавлении фреймов данных. Второй - интересно, есть ли более элегантный способ сделать это.
// 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
Я думаю, что ваш подход с использованием кортежей имеет смысл.
Немного досадно, что нет простого способа указывать значения по умолчанию при добавлении! Самое легкое решение, о котором я могу думать, состоит в том, чтобы перестроить обе серии в один и тот же набор ключей и использовать операцию заполнения для предоставления значений по умолчанию. Используя простые серии в качестве примера, что-то вроде этого должно сделать трюк:
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;