【发布时间】:2019-07-13 08:43:37
【问题描述】:
我的字典将 (item, field) 元组作为键,将 (1,1) 数据帧作为值,列等于元组 (item, field),行索引作为单个日期(所有项目都相同),例如:
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
这是字典:
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()
【问题讨论】:
-
你能写一些东西来重建输入数据字典在 Python 代码中的样子吗?努力从问题中完全理解
-
@SvenHarris 我更新了帖子