Давайте преобразуем каждое значение вложенного списка в DataFrame, а затем вызовем pd.concat
.
columns = ['userid', 'score', 'related']
df_dict = {k : pd.DataFrame(v, columns=columns) for k, v in dict1.items()}
df = (pd.concat(df_dict)
.reset_index(level=1, drop=True)
.rename_axis('memberid')
.reset_index()
)
Или аналогичным образом -
df = pd.concat([
pd.DataFrame(v, columns=columns, index=np.repeat(k, len(v)))
for k, v in dict1.items()
]
).rename_axis('memberid').reset_index()
df
memberid userid score related
0 808 a 5.4 b
1 808 c 4.1 b
2 808 d 3.7 f
Важное замечание - это решение также работает для нескольких пар ключ-значение, где каждый ключ может не иметь одинакового количества списков.Но из-за этой гибкости это может стать медленным для больших DataFrames.В этом случае приведенное ниже модифицированное решение работает, если dict1
содержит только одну запись -
k, v = list(dict1.items())[0]
pd.DataFrame(v, columns=columns, index=np.repeat(k, len(v))).reset_index()
index userid score related
0 808 a 5.4 b
1 808 c 4.1 b
2 808 d 3.7 f