кадр данных Pandas Pivot с несколькими групповыми - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть пандас с такими данными:

df:

     item   day         time      data  
0   item_0  2012-12-02  00:00:01  0.81  
1   item_0  2012-12-02  00:00:02  0.07
2   item_0  2012-12-03  00:00:00  0.84  
3   item_1  2012-12-02  00:00:01  0.47

Комбинация пункт + день + время уникальна

Я пытаюсьпреобразовать в:

     item   day         time_0    time_1   time_2  
0   item_0  2012-12-02  NaN       0.81     0.07
1   item_0  2012-12-03  0.84      NaN      NaN  
2   item_1  2012-12-02  NaN       0.47     ... 

Я пробовал:

df_stage_1 = df.groupby(['item','day']).apply(lambda x: x['time'].tolist()).reset_index()

приведенный выше код создает список, но время не выравнивается с 00:00:00 - я мог бы просто проверить список идобавить и отследить индексы (поэтому можно добавить Nan в список значений по этим индексам)

df_stage_1 = pd.DataFrame(df_stage_1.tolist(), )

приведенный выше код дает мне блок данных (не выровненных) значений времени, которые я мог бы выровнять (см. выше) и добавитьк кадру данных, созданному на шаге выше, но я не могу понять, как получить значения для кадра данных в правильных выровненных по времени столбцах

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Другое решение - set_index, unstack, reset_index:

df.set_index(['item', 'day', 'time'])['data'].unstack().reset_index()

time    item         day  00:00:00  00:00:01  00:00:02
0     item_0  2012-12-02       NaN      0.81      0.07
1     item_0  2012-12-03      0.84       NaN       NaN
2     item_1  2012-12-02       NaN      0.47       NaN

Помните, что df.unstack в пандах относится к индексу: он unstacks самый внутренний уровеньиндекса и превращает его в столбцы.

0 голосов
/ 29 сентября 2018

Вы можете использовать pd.pivot_table:

res = df.pivot_table(index=['item', 'day'], columns='time',
                     values='data', aggfunc='first').reset_index()

print(res)

time    item         day  00:00:00  00:00:01  00:00:02
0     item_0  2012-12-02       NaN      0.81      0.07
1     item_0  2012-12-03      0.84       NaN       NaN
2     item_1  2012-12-02       NaN      0.47       NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...