У меня возникли проблемы с конкретной проблемой переформатирования данных в правильном формате.Преобразование Panda DataFrame в Panel-подобную структуру
У меня есть данные, как это:
Date Hour Category Col1 Col2
1/1/10 1:00 1 France 1.1 1.2
1/1/10 2:00 2 France 2.9 1.4
1/1/10 1:00 1 UK 3.8 2.3
2/1/10 1:00 1 France 1.4 1.0
2/1/10 1:00 1 UK 1.1 0.1
2/1/10 2:00 2 UK 1.2 0.4
3/1/10 1:00 1 France 0.5 0.6
Что мне нужно в конце концов:
- каждая строка должна соответствовать уникальной пары (категория + час)
- Каждая строка содержит список Pd.Series (каждый Pd.series соответствует дате). Таким образом, длина списка соответствует количеству дней, которые соответствуют с (Категория + Hour)
- Каждый элемент списка является pd.Series объект, содержащий другие значения
(Таким образом, это связанных с 3D-массив или панели, но количество элементов в списках может измениться)
выход будет что-то вроде этого:
Hour+Category Lists
1+France [[1/1/10 1.1 1.2] [2/1/10 1.4 1.0] [3/1/10 0.5 0.6]]
2+France [[1/1/10 2.9 1.4]]
1+UK [[1/1/10 3.8 2.3] [2/1/10 1.1 0.1]
2+UK [[2/1/10 1.2 0.4]]
Мои первые попытки были:
X = X.group_by(['Hour','Category','Date']).first()
Это создает мультииндекс, который, я думаю, может быть полезен для изменения. я мог бы использовать
X.to_panel()
, которая создает 3D-панель, но где главная ось и малая ось являются Hour и категории. Else я мог бы попробовать
X.unstack(level = 2)
иметь 2D массив с колонкой бытии (час + категория) и столбцов между (День + Col1, день + Col2), а затем удалите значения NA в каждой строке и сохранить только оставшиеся значения.
Но я все еще пытаюсь найти лучшее решение. я тоже думал что-то вроде этого, но я не могу заставить его работать:
X = X.group_by(['Hour','Category']).apply(lambda x :
[pd.Series(dict(???)) ]
Спасибо за вашу помощь.
Действительно, это работает! Большое спасибо. Мне нужен он в этом формате, чтобы подключить его к фонограммным библиотекам, таким как keras, которые запрашивают формат «списка последовательности». – cbournho