在一个多索引数据框中合并两个数据系列

时间:2019-08-14 16:46:37

标签: python-3.x pandas dataframe

我有一个嵌套的字典(三个级别),其中包含最低级别的元组。字典中的信息应放置在预定义的索引中,该索引用于导入到其他位置的多索引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选项有些迷惑。预先非常感谢。

2 个答案:

答案 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