Python Dict of Dict of Dict to dataframe-将多索引行更改为列

Python Dict of Dict of Dict to dataframe-将多索引行更改为列,python,pandas,dictionary,Python,Pandas,Dictionary,我有一本这样的字典: my_dict = {'Key': {'Service': {'Number': 61, 'Percent': 2.54 }, 'Service2': {'Number': 42, 'Percent': 2.2 } }, 'Key2': {'Service3': {'Number': 8, 'Percent': 2.74}, 'Service2': {'Number': 52, 'Percent': 2.5 } }} 我正在尝试将其转换为熊猫数据帧。我得到了这个解决方案

我有一本这样的字典:

my_dict = {'Key': {'Service': {'Number': 61, 'Percent': 2.54 }, 'Service2': {'Number': 42, 'Percent': 2.2 } }, 'Key2': {'Service3': {'Number': 8, 'Percent': 2.74}, 'Service2': {'Number': 52, 'Percent': 2.5 } }}
我正在尝试将其转换为熊猫数据帧。我得到了这个解决方案

pandas.concat(map(pandas.DataFrame, my_dict.itervalues()), keys=my_dict.keys()).stack().unstack(0)
然而,我的问题是,我得到了一个表,其中行索引是服务的多索引&Number/Percent。相反,我希望索引只是出现的不同服务(而不是多索引),并且希望列是键,就像现在一样,但是1列部分是数字,第2列部分是带百分比的所有键,如果这有意义的话。转置不是我想要的,因为我不想改变整个索引,只想改变数字/百分比部分。我希望它看起来像这样,在将它从我上面写的字典转换为数据帧之后:

          Number         Percent
          Key    Key2    Key     Key2
Service   61     NaN     2.54    NaN
Service2  42     52      2.2     2.5
Service3  NaN    8       NaN     2.74
有什么建议吗

pd.concat({k: pd.DataFrame(v) for k, v in my_dict.items()})

              Service  Service2  Service3
Key  Number     61.00      42.0       NaN
     Percent     2.54       2.2       NaN
Key2 Number       NaN      52.0      8.00
     Percent      NaN       2.5      2.74


这不依赖于理解

pd.DataFrame(my_dict).stack().apply(pd.Series).unstack()
# pandas.DataFrame(i).stack().apply(pandas.Series).unstack()

         Number       Percent      
            Key  Key2     Key  Key2
Service    61.0   NaN    2.54   NaN
Service2   42.0  52.0    2.20  2.50
Service3    NaN   8.0     NaN  2.74

您能显示所需的输出(并格式化您的代码块)吗?是的,很抱歉,现在已更新为包含该输出。谢谢您--我尝试时似乎收到了一个指向“for”的SyntaxError--您知道为什么吗?pandas.concat({k:pandas.DataFrame(v)代表k,v在i.items()中)。T.swaplevel(0,1,1)。排序索引(1)^SyntaxError:无效syntax@jagold1是的,您有一个输入错误
pandas.concat({k:pandas.DataFrame(v)代表k,v在我的dict.items()中)。T.swaplevel(0,1,1)。sort_index(1)
对不起,输入错误在哪里?我所说的“我”与我的口述相同。我相信我使用的语法与你的回答相同,但我使用的是pandas而不是pd,否则这应该有效吗??——pandas.concat({k:pandas.DataFrame(v)代表k,v在我的dict.items()中)。T.swaplevel(0,1,1)。sort_index(1)@jagold1抱歉,我假设这是打字错误。。。这应该行得通。你用的是什么版本的熊猫
pandas.\uuuuu version\uuuuu
您使用的python版本是什么?从旧版本来看,SyntaxError似乎不太可能出现。然而,直到Python2.7才引入字典理解,如果您使用的是早期版本,这将导致语法错误。
pd.DataFrame(my_dict).stack().apply(pd.Series).unstack()
# pandas.DataFrame(i).stack().apply(pandas.Series).unstack()

         Number       Percent      
            Key  Key2     Key  Key2
Service    61.0   NaN    2.54   NaN
Service2   42.0  52.0    2.20  2.50
Service3    NaN   8.0     NaN  2.74