[英]Create a Pandas Dataframe from nested dict
我有一個具有以下結構的嵌套字典:course_id,嵌套字典:2 個推薦的課程和每門課程的購買次數。 例如,這個 dict 的條目看起來像這樣:
{490: {566: 253, 551: 247},
357: {571: 112, 356: 100},
507: {570: 172, 752: 150}}
我嘗試使用此代碼從該字典中制作 dataframe :
result=pd.DataFrame.from_dict(dicts, orient='index').stack().reset_index()
result.columns=['Course ID','Recommended course','Number of purchases']
這對我來說不太適用,因為我想要一個有 5 列的 output。 課程ID,推薦課程1,購買1,推薦課程2,購買2。這個有什么解決辦法嗎? 提前致謝。
我建議你重新塑造你的字典,然后重新創建你的 dataframe,但是你離目標 output 不遠了,你現在的 Z6A8064B5DF479455500553C47C55057
我們可以cumcount
groupby
我們唯一的列,然后從創建的多索引 header 中取消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)
Output:-
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 轉換為鍵、值對的平面列表,並使用鍵是課程 ID 的字典理解存儲到字典d2
中,然后使用 pandas 繼續形成 dataframe。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.