从多行读取值并将它们组合在pandas数据帧的另一行中

时间:2018-01-23 16:17:19

标签: python pandas

我有以下数据框:

    item_id     bytes value_id       value
1       0         2.0     year          2017
2       0         1.0    month            04
3       0         1.0      day            12
4       0         1.0     time            07
5       0         1.0   minute            13
6       1         2.0     year          2017
7       1         1.0    month            12
8       1         1.0      day            19
9       1         1.0     time            09
10      1         1.0   minute            32
11      2         2.0     year          2017
12      2         1.0    month            04
13      2         1.0      day            17
14      2         1.0     time            14
15      2         1.0   minute            24

我希望能够计算每个item_id的时间。如何通过此处或其他任何方式使用组来实现以下目标?

item_id             time
0       2017/04/12 07:13
1       2017/12/19 09:32
2       2017/04/17 14:24

2 个答案:

答案 0 :(得分:2)

使用pivot + to_datetime

pd.to_datetime(
  df.drop('bytes', 1)
    .pivot('item_id', 'value_id', 'value')
    .rename(columns={'time' :'hour'})

).reset_index(name='time')

   item_id                time
0        0 2017-04-12 07:13:00
1        1 2017-12-19 09:32:00
2        2 2017-04-17 14:24:00

您可以在转动之前删除bytes列,但它似乎不需要它。

答案 1 :(得分:0)

set_index + unstackpd.to_datatime也可以传递数据框,您只需要正确命名列

 pd.to_datetime(df.set_index(['item_id','value_id']).value.unstack().rename(columns={'time' :'hour'}))
Out[537]: 
item_id
0   2017-04-12 07:13:00
1   2017-12-19 09:32:00
2   2017-04-17 14:24:00
dtype: datetime64[ns]