Сводная таблица панд со смешанными типами значений по идентификатору и времени - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть таблица df вида (не фактическая таблица) со смешанными типами для значений:

      ID    |        Time        |  Category  |  Value
ix   ----------------------------------------------------
0     457   |  2010-09-04 15:00  |  Name      | 'Foo'
1     542   |  2010-09-04 15:00  |  Name      | 'Bar'
2     542   |  2010-09-04 15:00  |  Sub       |  0.2
3     542   |  2010-09-04 15:00  |  Age       |  18
4     457   |  2010-09-04 15:40  |  Sub       |  0.7
5     457   |  2010-09-04 15:40  |  Age       |  20

Теперь я хочу преобразовать эту таблицу в cat_df, чтобы каждая категория быласвой собственный столбец со значением в виде строк, и он индексируется сначала по идентификатору, а затем по времени внутри определенного идентификатора, так что:

      ID    |        Time        |  Name  |  Sub  | Age
ix   ----------------------------------------------------
0     457   |  2010-09-04 15:00  | 'Foo'  |  -    |  -
1     457   |  2010-09-04 15:40  |   -    |  0.7  | 20
2     542   |  2010-09-04 15:00  | 'Bar'  |  0.2  | 18

Тире означает NA/NoneType.Я продолжаю получать повторяющиеся ошибки всякий раз, когда я использую df.pivot с ID и временем в качестве индекса.Поэтому я запустил следующий код:

mid_df = df.pivot(columns='Category', values='Value')

И в результате я получаю следующую таблицу для mid_df:

      Name    |   Sub    |  Age  
ix   ------------------------------ 
0     'Foo'   |    -     |  -
1     'Bar'   |    -     |  -
2       -     |    0.2   |  -
3       -     |    -     |  18
4       -     |    0.7   |  -
5       -     |    -     |  20

Что нормально, я полагаю?Я могу добавить ID и данные о времени, присоединившись к ix.Но я хотел бы объединить строки по времени для каждого идентификатора.чтобы получить финальную таблицу выше.

  • Так как мне преобразовать df в cat_df напрямую, помня ID и время?
  • Или как объединить строкив mid_df чтобы обеспечить наименьшее количество NA для каждого временного шага?
  • Агрегирование : если бы я хотел агрегировать данные по часам / данным, как бы я обрабатывал смешанные типы данных для значений?Я хотел бы усреднить для числовых и выбрать последний для категориальных
  • Кроме того, есть ли способ определить, какой период времени агрегировать, чтобы обеспечить наименьшее количество NA? *

1 Ответ

0 голосов
/ 24 апреля 2018

Если ID не отображается, вы хотите классифицировать их на две группы, затем нам нужно создать ключ (с помощью cumsum), чтобы помочь разделить, first вернет first не нуль значение для каждого столбца

s=pd.concat([df[['ID','Time']],df.pivot(columns='Category', values='Value')],axis=1)
s.groupby([s.ID,s.ID.diff().ne(0).cumsum()]).first()
Out[540]: 
         ID             Time  Age   Name  Sub
ID  ID                                       
457 1   457  2010-09-0415:00  NaN  'Foo'  NaN
    3   457  2010-09-0415:40   20    NaN  0.7
542 2   542  2010-09-0415:00   18  'Bar'  0.2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...