Python 从嵌套的dict创建数据帧
我有一个嵌套的dict,其结构如下: 课程id,嵌套dict:2个推荐课程和每门课程的购买数量。 例如,此dict的条目如下所示:Python 从嵌套的dict创建数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个嵌套的dict,其结构如下: 课程id,嵌套dict:2个推荐课程和每门课程的购买数量。 例如,此dict的条目如下所示: {490: {566: 253, 551: 247}, 357: {571: 112, 356: 100}, 507: {570: 172, 752: 150}} 我试着用这段代码来制作一个数据帧: result=pd.DataFrame.from_dict(dicts, orient='index').stack().reset_index() resul
{490: {566: 253, 551: 247},
357: {571: 112, 356: 100},
507: {570: 172, 752: 150}}
我试着用这段代码来制作一个数据帧:
result=pd.DataFrame.from_dict(dicts, orient='index').stack().reset_index()
result.columns=['Course ID','Recommended course','Number of purchases']
这对我来说不太合适,因为我想要一个有5列的输出。
课程ID、推荐课程1、采购1、推荐课程2、采购2。
有什么解决办法吗?
提前感谢。我建议您只需重新构建字典,然后重新创建数据帧,但是您离从当前数据帧获得目标输出已经不远了 我们可以
groupby
并使用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
这不是一个有效的方法,但在您的情况下应该有效:-
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
您可以使用itertools链将嵌套的dict转换为键、值对的平面列表,并使用字典理解将其存储到字典
d2
,其中键是课程id,然后使用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