我有一个看起来像这样的表:
Index Group_Id Period Start Period End Value Value_Count
42 1016833 2012-01-01 2013-01-01 127491.00 17.0
43 1016833 2013-01-01 2014-01-01 48289.00 9.0
44 1016833 2014-01-01 2015-01-01 2048.00 2.0
45 1016926 2012-02-01 2013-02-01 913.00 1.0
46 1016926 2013-02-01 2014-02-01 6084.00 5.0
47 1016926 2014-02-01 2015-02-01 29942.00 3.0
48 1016971 2014-03-01 2015-03-01 0.00 0.0
我试图以“宽” df 结尾,其中每个 Group_Id 都有一个观察值,并且值/值计数按新近度的顺序转换为与它们各自时期相对应的列。所以最终的结果是这样的:
Index Group_Id Value_P0 Value_P1 Value_P3 Count_P0 Count_P1 ...
42 1016833 2048.00 48289.00 127491.00 2.0 9.0
45 1016926 29942.00 6084.00 913.00 3.0 5.0
48 1016971 0.0 0.00 0.0 0.0 0.0
其中 Value_P0 是最近的值,Value_P1 是之后的下一个最近的值,Count 列的工作方式相同。
我尝试旋转表格,使 Group_IDs 是索引,Period Start 是列,Values 或 Counts 是相应的值。
Period Start 2006-07-01 2008-07-01 2009-02-01 2009-12-17 2010-02-01 2010-06-01 2010-07-01 2010-08-13 2010-09-01 2010-12-01 ... 2016-10-02 2016-10-20 2016-12-29 2017-01-05 2017-02-01 2017-03-28 2017-04-10 2017-05-14 2017-08-27 2017-09-15
Group_Id
1007310 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1007318 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1007353 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
这样,我将 Group_Ids 作为一条记录,但随后需要遍历许多列的每一行并提取非 NaN 值。他们的顺序将对应于最旧到最新。不过,这似乎是一种不正确的方法。
我还考虑过按 Group_Id 进行分组,并以某种方式创建与最近日期相对应的 timedelta。然后从此旋转/取消堆叠,以便列是 timedelta,值是 value 或 value_count。我不确定如何做到这一点。我很感激帮助。