我试图弄清楚如何创建一个数据集,其中第一列包含字典中的'ID'和字典列表中值的第二列,以便我可以用seaborn绘制它。
di = {'a' : [1,4,5], 'b' : [1,8],'c' : [56,100,5,568],'d' : [20,10,2],'e' : [1000,3,675]}
我想要这样的东西:
ID Value
a 1
a 4
a 5
b 1
b 8
c 56
c 100
现在我只有这段代码可以分隔我的ID和我的值,但仍然保留我的值作为列表,而不是上面给出的搜索结果的例子。
serie = pd.Series(di)
df = pd.DataFrame({'ID':serie.index, 'Value':serie.values})
非常感谢帮助。提前致谢!
您可以将字典结构化为类似记录的列表(基本上是列表列表)以传递给pd.DataFrame.from_records
函数:
lol = [list(zip([x]*len(y), y)) for x, y in di.items()]
df = pd.DataFrame.from_records([x for y in lol for x in y], columns=['ID', 'Value'])
sns.swarmplot(x="ID", y="Value", data=df)
或者,您可以使用pd.Series
并使用以下内容解开行内的列表:
df = pd.Series(di).apply(pd.Series).stack()
df = df.reset_index(level=0).rename(columns=lambda x: 'ID' if x else 'Value')
sns.swarmplot(x="ID", y="Value", data=df)
要么应该得到你需要的东西。