2017-09-13 53 views
1

我已经看到相关主题使用换位或数据透视,但无法使其工作。 我有两列数据帧,时间戳和分钟数据。熊猫分钟数据列到60分钟列

我想转置数据框,以便最终得到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分钟, 这样做,但我不知道是否有更紧凑的方式来做到这一点。

回答

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 
+0

.dt.floor ...好。 +1 –

+0

连续两个问题:) –

+0

工程就像一个魅力。谢谢。 +1 – reicja

1

.dt.floor从@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