繁体   English   中英

DataFrames上的Multiindex和熊猫的总和

[英]Multiindex on DataFrames and sum in Pandas

我目前正在尝试使用Pandas MultiIndex属性。 我试图以一种聪明的方式基于其列对现有的DataFrame-对象df_original进行分组,因此正在考虑MultiIndex。

print df_original =

       by_currency   by_portfolio    A  B  C
1        AUD          a              1  2  3
2        AUD          b              4  5  6
3        AUD          c              7  8  9
4        AUD          d              10 11 12
5        CHF          a              13 14 15 
6        CHF          b              16 17 18
7        CHF          c              19 20 21
8        CHF          d              22 23 24

现在,我想拥有一个MultiIndex DataFrame对象, A, B对象具有A, BC ,并且by_portfolio作为索引。 看起来像

              CHF     AUD
A       a     13      1
        b     16      4   
        c     19      7
        d     22      10
B       a     14      2
        b     17      5
        c     20      8
        d     23      11
C       a     15      3
        b     18      6
        c     21      9
        d     24      12

我尝试过将df_original所有列和所需的索引都放入列表对象中,然后从那里创建一个新的DataFrame。 这似乎有点麻烦,我无法弄清楚之后如何添加实际值。

也许某种方式的groupby对此更好? 问题是,我需要能够将此数据添加到另一个类似的DataFrame中,因此我需要将生成的DataFrame以后可以添加到另一个DataFrame中。

谢谢

您可以结合使用stackunstack

In [50]: df.set_index(['by_currency', 'by_portfolio']).stack().unstack(0)
Out[50]:
by_currency     AUD  CHF
by_portfolio
a            A    1   13
             B    2   14
             C    3   15
b            A    4   16
             B    5   17
             C    6   18
c            A    7   19
             B    8   20
             C    9   21
d            A   10   22
             B   11   23
             C   12   24

为了获得您想要的结果,我们只需要交换索引级别:

In [51]: df2 = df.set_index(['by_currency', 'by_portfolio']).stack().unstack(0)

In [52]: df2.columns.name = None

In [53]: df2.index = df2.index.swaplevel(0,1)

In [55]: df2 = df2.sort_index()

In [56]: df2
Out[56]:
                AUD  CHF
  by_portfolio
A a               1   13
  b               4   16
  c               7   19
  d              10   22
B a               2   14
  b               5   17
  c               8   20
  d              11   23
C a               3   15
  b               6   18
  c               9   21
  d              12   24

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM