我有一个包含多个键的字典,它有一个值,一个数据框架,如下所示,可以有不同数量的索引。
'key1':
colB
colA
str1 3
str2 4
str3 5
'key2':
colB
colA
str2 3
str3 4
str5 5
'key3':
colB
colA
str4 3
str5 4
str6 5我想知道如何创建如下所示的数据框架
str1 str2 str3 ... str 6
key1 3 4 5 .. NaN
key2 NaN 3 4 .. NaN
key3 NaN NaN NaN .. 5 当一个值丢失时,使用“NaN”。
我已经使用了reset_index,为每个数据帧创建了熊猫系列,然后为每一行寻找匹配的值来重新创建正确的数据框架,但我发现它非常慢,而且根本不是最佳的。
发布于 2018-12-28 16:27:25
我想你只需要concat和unstack注意到d是你的dict
pd.concat(d).colB.unstack()
Out[663]:
colA str1 str2 str3 str4 str5 str6
k1 3.0 4.0 5.0 NaN NaN NaN
k2 NaN 3.0 4.0 NaN 5.0 NaN
k3 NaN NaN NaN 3.0 4.0 5.0发布于 2018-12-28 16:20:52
您可以使用pandas.concat()来完成这个任务。有关Concat文件文档,请参阅此处
例如,假设您的字典名为my_dict,您可以执行以下代码:
pd.concat(my_dict.values())这假设你已经进口了熊猫作为pd。请参阅嵌入在concat中的选项的文档。
最后,要将它变成您想要的形式,您可以使用:
pd.unstack()若要将多索引值作为行标题获取,请执行以下操作。或者简单的pd.df.rename()
为了在这里给您更多的建议,最好让代码生成原始数据。
发布于 2018-12-28 16:40:33
参见示例代码:
import pandas as pd
key1 = {'str1':3,'str2':4,'str3':5}
key2 = {'str2':3,'str3':4,'str5':5}
key3 = {'str4':3,'str5':4,'str6':5}
df1=pd.DataFrame.from_dict(key1, orient='index')
df1.rename(columns={0:'key1'},inplace=True)
df2=pd.DataFrame.from_dict(key2, orient='index')
df2.rename(columns={0:'key2'},inplace=True)
df3=pd.DataFrame.from_dict(key3, orient='index')
df3.rename(columns={0:'key3'},inplace=True)
df = pd.concat([df1,df2,df3],axis=1)
df_final=df.T
df_final.head()代码很简单,如果您需要更多的解释,请告诉我。
https://stackoverflow.com/questions/53961299
复制相似问题