Python 时间跨度和组:需要使用索引作为组id的groupby/pivot,其中的列对应于最新的周期值

Python 时间跨度和组:需要使用索引作为组id的groupby/pivot,其中的列对应于最新的周期值,python,pandas,time-series,timespan,data-munging,Python,Pandas,Time Series,Timespan,Data Munging,我有一张这样的桌子: 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-

我有一张这样的桌子:

   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结束,其中每个组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
其中,值_P0是最近的值,值_P1是之后的下一个最近的值,计数列的工作方式相同

我尝试了旋转表,以便组ID是索引,周期开始是列,值或计数是相应的值

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_id作为一个记录,但随后需要循环遍历多个列的每一行并提取非NaN值。他们的顺序是从最老的到最新的。但这似乎是一种不正确的方式


我还考虑过按组Id分组,并以某种方式创建一个与最近日期相对应的时间差。然后从该数据透视/取消堆栈,使列为时间增量,值为value或value_count。但我不知道该怎么做。我感谢你的帮助

仍在使用
pivot

df['ID']=df.groupby('Group_Id').cumcount()
d1=df.pivot('Group_Id','ID','Value').add_prefix('Value_P')
d2=df.pivot('Group_Id','ID','Value_Count').add_prefix('Count_P')
pd.concat([d1,d2],axis=1).fillna(0)

Out[347]: 
ID        Value_P0  Value_P1  Value_P2  Count_P0  Count_P1  Count_P2
Group_Id                                                            
1016833   127491.0   48289.0    2048.0      17.0       9.0       2.0
1016926      913.0    6084.0   29942.0       1.0       5.0       3.0
1016971        0.0       0.0       0.0       0.0       0.0       0.0

仍在使用
pivot

df['ID']=df.groupby('Group_Id').cumcount()
d1=df.pivot('Group_Id','ID','Value').add_prefix('Value_P')
d2=df.pivot('Group_Id','ID','Value_Count').add_prefix('Count_P')
pd.concat([d1,d2],axis=1).fillna(0)

Out[347]: 
ID        Value_P0  Value_P1  Value_P2  Count_P0  Count_P1  Count_P2
Group_Id                                                            
1016833   127491.0   48289.0    2048.0      17.0       9.0       2.0
1016926      913.0    6084.0   29942.0       1.0       5.0       3.0
1016971        0.0       0.0       0.0       0.0       0.0       0.0