Создайте Pandas Dataframe из вложенного dict - PullRequest
1 голос
/ 19 июня 2020

У меня есть вложенный dict со следующей структурой: course_id, вложенный dict с: 2 рекомендованными курсами и количеством покупок для каждого курса. Например, записи этого dict выглядят так:

 {490: {566: 253, 551: 247},
 357: {571: 112, 356: 100},
 507: {570: 172, 752: 150}}

Я пробовал этот код, чтобы создать фрейм данных из этого dict:

result=pd.DataFrame.from_dict(dicts, orient='index').stack().reset_index()
result.columns=['Course ID','Recommended course','Number of purchases']

Pls. see the output

Для меня это не совсем работает, потому что мне нужен вывод, в котором будет 5 столбцов. Идентификатор курса, рекомендуемый курс 1, покупки 1, рекомендуемый курс 2, покупки 2. Есть ли какое-то решение для этого? Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 19 июня 2020

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

s1 = result.groupby(['Course ID',
             result.groupby(['Course ID']).cumcount() + 1]).first().unstack()

s1.columns = [f"{x}_{y}" for x,y in s1.columns]


              Recommended course_1  Recommended course_2  Number of purchases_1  \
Course ID                                                                      
357                         571                   356                  112.0   
490                         566                   551                  253.0   
507                         570                   752                  172.0   

           Number of purchases_2  
Course ID                         
357                        100.0  
490                        247.0  
507                        150.0
0 голосов
/ 19 июня 2020

Вы можете использовать цепочку itertools для преобразования вложенного dict в плоский список ключей, пар значений и сохранения в словарь d2 с использованием понимания словаря, где ключи являются идентификатором курса, а затем продолжить формирование фрейма данных с использованием pandas.

import pandas as pd
from itertools import chain

d = {
    490: {566: 253, 551: 247},
    357: {571: 112, 356: 100},
    507: {570: 172, 752: 150}
}

d2 = {k: list(chain.from_iterable(v.items())) for k, v in d.items()}
df = pd.DataFrame.from_dict(d2, orient='index').reset_index()
df.columns = ['id','rec_course1', 'n_purch_1', 'rec_course2', 'n_purch_2']

df

    id   rec_course1  n_purch_1  rec_course2  n_purch_2
0  490           566        253          551        247
1  357           571        112          356        100
2  507           570        172          752        150
0 голосов
/ 19 июня 2020

Неэффективный, но должен работать в вашем случае: -

df = pd.DataFrame([(k,list(v.keys())[0],list(v.values())[0],list(v.keys())[1],list(v.values())[1]) for k,v in a.items()], columns = ['Course ID','Recommended course 1','purchases 1', 'Recommended Course 2', 'purchases 2'])
print(df)

Вывод: -

   Course ID  Recommended course 1  purchases 1  Recommended Course 2  \
0        490                   566          253                   551
1        357                   571          112                   356
2        507                   570          172                   752

   purchases 2
0          247
1          100
2          150
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...