Pandas合并分层数据帧并维护层次结构

时间:2013-11-08 15:41:47

标签: python pandas

This github issue描述了合并具有混合层次结构的数据帧,并给出了将层次结构展平为元组的解决方案。

df = pd.DataFrame([(1, 2, 3), (4, 5, 6)], columns=['a', 'b', 'c'])
new_df = df.groupby(['a']).agg({'b': [np.mean, np.sum]})
other_df = df = pd.DataFrame([(1, 2, 3), (7, 10, 6)], columns=['a', 'b', 'd'])
other_df.set_index('a', inplace=True)
print new_df
print other_df
p = pd.merge(new_df, other_df, left_index=True, right_index=True)
print p

输出:

      b     
   mean  sum
a           
1     2    2
4     5    5

    b  d
a       
1   2  3
7  10  6

   (b, mean)  (b, sum)  b  d
a                           
1          2         2  2  3

但是我想维护层次结构,结果如下:

       b        b  d
    mean  sum
x                           
y      .    .   .  .

我刚刚在这里制作了价值点,因为它们在这种情况下确实没有意义,但希望这个想法很明确......任何帮助都会感激不尽......

1 个答案:

答案 0 :(得分:4)

你在寻找这样的东西:

>>> other_to_tup = [(x, 'val') for x in other_df.columns]
>>> other_df.columns = pd.MultiIndex.from_tuples(other_to_tup)
>>> p = pd.merge(new_df, other_df, left_index=True, right_index=True)
>>> p
      b              d
   mean  sum  val  val
a
1     2    2    2    3