Вложенный набор списков для панд - PullRequest
0 голосов
/ 04 февраля 2019

У меня довольно грязный вложенный словарь, который я пытаюсь преобразовать во фрейм данных pandas.Данные хранятся в словаре списков, содержащемся в более широком словаре, где следует каждая разбивка ключа / значения: {userID_key: {postID_key: [list of hash tags]}}

Вот более конкретный пример того, как выглядят данные:

   {'user_1': {'postID_1':  ['#fitfam',
                             '#gym',
                             '#bro'],
               'postID_2':  ['#swol',
                             '#anotherhashtag']},
    'user_2': {'postID_78': ['#ripped',
                             '#bro',
                             '#morehashtags'],
               'postID_1':  ['#buff',
                             '#othertags']},
    'user_3': ...and so on }

Я хочу создать фрейм данных, который даст мне счетчики частоты каждого хэштега для каждой пары (userID, postID), как показано ниже:

+------------+------------+--------+-----+-----+------+-----+
| UserID_key | PostID_key | fitfam | gym | bro | swol | ... |
+------------+------------+--------+-----+-----+------+-----+
| user_1     | postID_1   | 1      | 1   | 1   | 0    | ... |
| user_1     | postID_2   | 0      | 0   | 0   | 1    | ... |
| user_2     | postID_78  | 0      | 0   | 1   | 0    | ... |
| user_2     | postID_1   | 0      | 0   | 0   | 0    | ... |
| user_3     | ...        | ...    | ... | ... | ...  | ... |
+------------+------------+--------+-----+-----+------+-----+

В качестве идеи у меня был CountVectorizer из scikit-learnно он не сможет обработать вложенный словарь.Буду признателен за любую помощь в получении этого желаемого формы.

1 Ответ

0 голосов
/ 04 февраля 2019

Опираясь на мой ответ на другой вопрос , вы можете создавать и объединять подкадры, используя pd.concat, затем использовать stack и get_dummies:

(pd.concat({k: pd.DataFrame.from_dict(v, orient='index') for k, v in dct.items()})
   .stack()
   .str.get_dummies()
   .sum(level=[0, 1]))

                  #anotherhashtag  #bro  #buff  #fitfam  #gym  #morehashtags  #othertags  #ripped  #swol
user_1 postID_1                 0     1      0        1     1              0           0        0      0
       postID_2                 1     0      0        0     0              0           0        0      1
user_2 postID_78                0     1      0        0     0              1           0        1      0
       postID_1                 0     0      1        0     0              0           1        0      0
...