简体   繁体   中英

Read values from multiple rows and combine them in another row in pandas dataframe

I have the following dataframe:

    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

I want to be able to calculate the time for each item_id . How do I use group by here or anything else to achieve the following?

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

Use 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

You can drop the bytes column before pivoting, it doesn't seem like you need it.

set_index + unstack also , pd.to_datatime can passed a dataframe, you only need to name your column correctly

 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]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM