我有一个嵌套的字典(三个级别),其中包含最低级别的元组。字典中的信息应放置在预定义的索引中,该索引用于导入到其他位置的多索引DataFrame(两个级别)。
该元组将在数据帧的第三级上拆分。
import pandas as pd
# This is the dataframe template:
index_struct = [('A', 'buffer', 'mean'), ('A', 'buffer', 'var'), ('A', 'cycle', 'mean'), ('A', 'cycle', 'var')
, ('B', 'buffer', 'mean'), ('B', 'buffer', 'var'), ('B', 'cycle', 'mean'), ('B', 'cycle', 'var')]
index = pd.MultiIndex.from_tuples(index_struct)
# This is the nested dictionary that is passed:
data_dict = {'A': {'buffer': (5, 7)}, 'B': {'buffer': (6, 2), 'cycle': (8, 3)}}
简单的from_dict
数据得出:
print(pd.DataFrame.from_dict(data))
[OUT]:
A B
buffer (5, 7) (6, 2)
cycle NaN (8, 3)
print(pd.DataFrame.from_dict(data, orient='index')
计算得出。
我希望它看起来像这样:
A B
buffer cycle buffer cycle
mean var mean var mean var mean var
0 5.0 7.0 NaN NaN 6.0 2.0 8.0 3.0
大概该解决方案应该包含两个步骤: 将均值信息添加到数据中,然后将其实现到DataFrame模板中。
我对pandas软件包提供的may选项有些迷惑。预先非常感谢。
答案 0 :(得分:0)
不确定这是否可以解决您的问题,但是如果您将数据写为
data_dict = {('A', 'buffer', 'mean'): 5,
('A', 'buffer', 'var'): 7,
('A', 'cycle', 'mean'): np.nan,
('A', 'cycle', 'var'): np.nan,
('B', 'buffer', 'mean'): 6,
('B', 'buffer', 'var'): 2,
('B', 'cycle', 'mean'): 8,
('B', 'cycle', 'var'): 3}
然后
pd.Series(data_dict).to_frame().T
将导致所需的输出。
答案 1 :(得分:0)
我们可以在读取DataFrame以拆分元组后重新创建它。然后,在确保正确订购(使用.reindex
)后,这是swaplevel
。
import pandas as pd
s = pd.DataFrame.from_dict(data_dict).stack()
df = (pd.DataFrame(s.tolist(), columns=['mean', 'var'], index=s.index).stack()
.swaplevel(0, 1)
.reindex(index)
.to_frame()
.T)
A B
buffer cycle buffer cycle
mean var mean var mean var mean var
0 5.0 7.0 NaN NaN 6.0 2.0 8.0 3.0