Pandas: как преобразовать данные этого широкоформатного формата в длинный формат - PullRequest
0 голосов
/ 09 июля 2020

Я ищу эффективный способ преобразовать данные из «широкой» структуры в фрейм данных.

Данные: у нас разные наблюдения, и каждое наблюдение имеет данные по характеристикам за разные дни. Идеальный фрейм данных будет иметь следующие столбцы: Наблюдение_ид, день, характеристика_1, характеристика_2, ....

Текущая структура данных: список словарей. Каждый словарь представляет собой наблюдение. В каждом словаре у нас есть ключ «monitoring_id» и вставлены ключи для дня + feature_id для всех дней и всех функций.

Например:

# Input:
x = [{'observation_id': '1', '0.feature_1': 2, '0.feature_2': 2, '1.feature_1': 3, '1.feature_2': 1},
     {'observation_id': '2', '0.feature_1': 7, '0.feature_2': 3, '1.feature_1': 4, '1.feature_2': 2},
     {'observation_id': '3', '0.feature_1': 5, '0.feature_2': 2, '1.feature_1': 5, '1.feature_2': 3}]

# Desired output:
  observation_id  day  feature_1  feature_2
0              1    0          2          2
1              1    1          3          1
2              2    0          7          3
3              2    1          4          2
4              3    0          5          2
5              3    1          5          3
                                                        

Я пробовал следующее, но это не так. не дает желаемого результата

df = pd.DataFrame(x)    
pd.wide_to_long(df, stubnames=["0", "1"], i="observation_id", j="feature", sep=".", suffix='\w+').reset_index()

# output:
  observation_id    feature  0  1
0              1  feature_1  2  3
1              2  feature_1  7  4
2              3  feature_1  5  5
3              1  feature_2  2  1
4              2  feature_2  3  2
5              3  feature_2  2  3

Есть идеи, как это сделать?

Спасибо!

1 Ответ

1 голос
/ 09 июля 2020

Попробуйте сложить stack и unstack

df = pd.DataFrame(x)    
yourdf = pd.wide_to_long(df, stubnames=["0", "1"], i="observation_id", j="feature", sep=".", suffix='\w+').\
              stack().unstack(1).reset_index()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...