pandas分钟数据列到60分钟列

时间:2017-09-13 18:53:18

标签: python pandas transpose

我见过使用转置或转轴的相关主题,但无法使其正常工作。 我有数据框,有两列,时间戳和分钟数据。

我想转置数据框,以便最终得到61列,如下所示;

旧DF看起来像

    Date                    Value   
0   2017-01-01 16:45        12  
1   2017-01-01 16:46        22  
    ...                     ...
n   2017-03-01 11:45        12

我希望新的DF基本上是

    DayHour           ...   Minute45   Minute46   ...   
0   2017-01-01 16     ...   12         22         ...
    ...               ...   ...        ...        ...
n   2017-03-01 11     ...   12         ...        ...

我以某种方式设法通过groupby和循环超过60分钟, 但我想知道是否有更紧凑的方式来做到这一点。

2 个答案:

答案 0 :(得分:4)

您可以为DayHour和分钟创建新列,然后转动表格。

df.assign(DayHour = df.Date.dt.floor('h'), minute=df.Date.dt.minute)\
  .pivot(index='DayHour', columns='minute', values='Value')\
  .add_prefix('Minute')

minute               Minute45  Minute46
DayHour                                
2017-01-01 16:00:00      12.0      22.0
2017-03-01 11:00:00      12.0       NaN

答案 1 :(得分:1)

使用.dt.floorset_index

从@TedPetrou获取unstack
In [58]: (df.set_index([df.Date.dt.floor('h'), df.Date.dt.minute])['Value']
            .unstack().add_prefix('Minute'))
Out[58]:
Date                 Minute45  Minute46
Date
2017-01-01 16:00:00      12.0      22.0
2017-03-01 11:00:00      12.0       NaN