Python 打开熊猫数据帧字典(1,1)

Python 打开熊猫数据帧字典(1,1),python,pandas,Python,Pandas,my dictionary将项目元组、字段元组作为键,将1,1数据帧元组作为值,列等于元组项目元组、字段元组、行索引元组作为所有项目的单一日期,例如: Key ('AB US Equity', 'CHG_PCT_1D') ('AB US Equity', 'PX_LAST') ('IBM US Equity', 'CHG_PCT_1D') ('IBM US Equity', 'PX_LAST') Value ('AB US Equity', 'CHG_PCT_1D') 2/15/

my dictionary将项目元组、字段元组作为键,将1,1数据帧元组作为值,列等于元组项目元组、字段元组、行索引元组作为所有项目的单一日期,例如:

Key
('AB US Equity', 'CHG_PCT_1D')
('AB US Equity', 'PX_LAST')
('IBM US Equity', 'CHG_PCT_1D')
('IBM US Equity', 'PX_LAST')

Value   
    ('AB US Equity', 'CHG_PCT_1D')
2/15/2019   0.5362

('AB US Equity', 'PX_LAST')
2/15/2019   30
这是dic:

   In [100]: str(dic)
Out[100]: "{('IBM US Equity', 'PX_LAST'):             (IBM US Equity, PX_LAST)\n2019-02-15                    138.03, ('IBM US Equity', 'CHG_PCT_1D'):             (IBM US Equity, CHG_PCT_1D)\n2019-02-15                       1.1357, ('AB US Equity', 'PX_LAST'):             (AB US Equity, PX_LAST)\n2019-02-15                     30.0, ('AB US Equity', 'CHG_PCT_1D'):             (AB US Equity, CHG_PCT_1D)\n2019-02-15                      0.5362}"
下面的代码将它们水平放置:

 output=pandas.concat(dic.values(),axis=1)
 output.columns=pandas.MultiIndex.from_tuples(output.columns)
 output.columns.names=['Item','Field']
虽然有数百个项目和几个字段,但我希望将其解压缩到以下垂直平面df中:

   Value    CHG_PCT_1D  PX_LAST
AB US Equity    0.5362  30
IBM US Equity   1.1357  138.03
解决方案 主要基于下面的答案

import pandas as pd

dic = {('IBM US Equity', 'PX_LAST'): '2019-02-15    138.03',
 ('IBM US Equity', 'CHG_PCT_1D'):           
 '2019-02-15                       1.1357',
 ('AB US Equity', 'PX_LAST'):             
 '2019-02-15                     30.0',
 ('AB US Equity', 'CHG_PCT_1D'):
 '2019-02-15                      0.5362'}

output = pd.DataFrame.from_dict(dic, orient = 'index')
# to series removing date
output = output[0].str.split().str[-1]
# unstack help, first example
index = pd.MultiIndex.from_tuples(output.index)
output = pd.Series(output.values, index=index).unstack()
请拿着这本书读一读。这些将帮助您更快地收集有用的响应

IIUC,您正在查看多索引的最内层。以下是我根据你的问题复制的代码:

dic = {('IBM US Equity', 'PX_LAST'): '2019-02-15                    138.03',
 ('IBM US Equity', 'CHG_PCT_1D'):           
 '2019-02-15                       1.1357',
 ('AB US Equity', 'PX_LAST'):             
 '2019-02-15                     30.0',
 ('AB US Equity', 'CHG_PCT_1D'):
 '2019-02-15                      0.5362'}

output = pd.DataFrame.from_dict(dic, orient = 'index')
output = output.reset_index()
output['a'] = output.apply(lambda row: row['index'][0], axis = 1)
output['b'] = output.apply(lambda row: row['index'][1], axis = 1)
output = output.drop(['index'], axis = 1)
output = output.groupby(['a', 'b']).sum().unstack()
output = output[0]
output['CHG_PCT_1D'] = output['CHG_PCT_1D'].str.split().str[-1]
output['PX_LAST'] = output['PX_LAST'].str.split().str[-1]
因此,当您运行output.to_string时,您会得到:

b             CHG_PCT_1D PX_LAST
a                               
AB US Equity      0.5362    30.0
IBM US Equity     1.1357  138.03

基于您的问题,我不知道您希望不同的列或索引命名为什么。我也不知道在分组的数据帧上运行哪种类型的聚合函数。

您可以编写一些东西来重建Python代码中输入数据字典的外观吗?挣扎着去完全理解question@SvenHarris我更新了postpologies,want output.columns=['CHG_PCT_1D','PX_LAST'],并从输出中完全删除了日期。我已经更新了代码以处理您的评论。解决方案基于以下代码: