0

我有具有参考日期和发布日期的数据。类似于在不同日期发布/发布的经济报告(即 2014 年第四季度 GDP 引用日期为 2014 年 12 月 31 日,但在下周于 2015 年 7 月 1 日发布)。多个参考日期值可以在一个发布日期发布。我希望能够将具有相似结构的数据添加在一起,只是没有对齐和重复的参考和发布日期。

以下是项目 A 的数据示例:

Publish_ItemA           Reference_ItemA         Value_ItemA
2002-01-10 00:00:00.000 2001-09-30 00:00:00.000 83
2002-02-14 00:00:00.000 2001-12-31 00:00:00.000 48
2002-05-23 00:00:00.000 2002-03-31 00:00:00.000 57
2002-08-15 00:00:00.000 2002-06-30 00:00:00.000 41
2002-12-31 00:00:00.000 2002-09-30 00:00:00.000 18
2003-02-13 00:00:00.000 2002-12-31 00:00:00.000 18
2003-05-22 00:00:00.000 2003-03-31 00:00:00.000 29
2003-08-21 00:00:00.000 2003-06-30 00:00:00.000 40
2003-12-31 00:00:00.000 2003-09-30 00:00:00.000 51
2004-12-16 00:00:00.000 2002-12-31 00:00:00.000 17
2004-12-16 00:00:00.000 2003-03-31 00:00:00.000 28
2004-12-16 00:00:00.000 2003-06-30 00:00:00.000 33
2004-12-16 00:00:00.000 2003-09-30 00:00:00.000 60
2004-12-16 00:00:00.000 2003-12-31 00:00:00.000 107

以下是项目 B 的数据示例:

Publish_ItemB           Reference_ItemB         Value_ItemB        
2001-01-25 00:00:00.000 2000-12-31 00:00:00.000 -207
2001-04-25 00:00:00.000 2000-12-31 00:00:00.000 -195
2001-04-25 00:00:00.000 2001-03-31 00:00:00.000 43
2001-07-19 00:00:00.000 2001-06-30 00:00:00.000 61
2001-10-18 00:00:00.000 2001-09-30 00:00:00.000 66
2002-01-17 00:00:00.000 2001-12-31 00:00:00.000 38
2002-04-24 00:00:00.000 2002-03-31 00:00:00.000 40
2002-07-18 00:00:00.000 2002-06-30 00:00:00.000 32
2002-10-17 00:00:00.000 2002-09-30 00:00:00.000 -45
2003-01-16 00:00:00.000 2002-12-31 00:00:00.000 -8
2003-04-24 00:00:00.000 2003-03-31 00:00:00.000 14
2003-07-17 00:00:00.000 2003-06-30 00:00:00.000 19
2003-10-23 00:00:00.000 2003-09-30 00:00:00.000 44
2004-01-22 00:00:00.000 2003-12-31 00:00:00.000 63

我希望能够对值列(即 itemAframe?Value_ItemA + itemBframe?Value_ItemB)进行对齐和算术运算,并返回一个包含参考日期或发布日期的系列,具体取决于所需的日期。

与参考日期对齐很容易,因为日期不重叠,因此重复键没有问题,但是返回带有发布日期的帧是有问题的,因为并非所有键都是唯一的

任何建议将不胜感激。

谢谢!

4

1 回答 1

0

答案取决于当给定(重复)发布日有多个值时您想要做什么。两个帧中的键数是否相同?您是否有某种聚合值的方法(例如取平均值或求和)?

例如,假设 Publish 和 Reference 只是整数:

let f =  
  frame [ "Publish" => Series.ofValues [ 1; 1; 2; 2 ]  
          "Reference" => Series.ofValues [ 1; 2; 3; 4 ]
          "Value" => Series.ofValues [ 10; 9; 11; 8] ]

您可以获得具有多级索引的框架(按发布日期分组,如下所示):

f
|> Frame.groupRowsByInt "Publish"

现在您的键将是元组 - 第一个元素是“发布”值,第二个元素是原始行索引(这里只是一个序数索引 - 但您也可以使用“参考”日期作为索引的次要部分) . 如果此时您有某种方法可以使键匹配(例如,两个帧中有相同数量的重复项,并且序号索引就足够了),那么您可以像现在一样使用帧。

但是,您可以做的下一件事是创建一系列框架,其中包含组:

f
|> Frame.groupRowsByInt "Publish"
|> Frame.nest

因此,例如,如果您想获得每个发布日的平均值,您可以执行以下操作:

f
|> Frame.groupRowsByInt "Publish"
|> Frame.nest
|> Series.mapValues (fun df -> df?Value |> Stats.mean)

或者,您可以创建一个系列,其中包含每个“发布”日期的值列表,但这会使进一步的计算变得更加困难:

f
|> Frame.groupRowsByInt "Publish"
|> Frame.nest
|> Series.mapValues (fun df -> df?Value.Values |> List.ofSeq)

从根本上说,您需要一些索引方案来唯一标识两个框架中的行,以便您可以对齐它们。关键可能只是“发布”日期或“发布”日期以及其他内容。

于 2015-07-08T13:59:51.317 回答