2

MultiIndex と stack() に問題があります。次の例は、StackOvervlow に関するCalvin Cheungのソリューションに基づいています。

=== multi.csv ===
  h1,main,h3,sub,h5
  a,A,1,A1,1
  b,B,2,B1,2
  c,B,3,A1,3
  d,A,4,B2,4
  e,A,5,B3,5
  f,B,6,A2,6

=== multi.py ===
  #!/usr/bin/env python

  import pandas as pd

  df1 = pd.read_csv('multi.csv')
  df2 = df1.pivot('main', 'sub').stack()
  print(df2)

=== output ===
           h1  h3  h5
  main sub
  A    A1   a   1   1
       B2   d   4   4
       B3   e   5   5
  B    A1   c   3   3
       A2   f   6   6
       B1   b   2   2

これは、サブ列のエントリがメイン列の対応するエントリに対して一意である限り機能します。しかし、行 e のサブ列エントリを B2 に変更すると、B2 は A 行のグループ内で一意ではなくなり、次のエラー メッセージが表示されます。 .

サブ インデックスの形状は、プライマリ インデックスの形状と同じように動作することが期待されていました。最初の行エントリの下に空白のエントリが表示され、重複が示されます。

=== expected output ===
           h1  h3  h5
  main sub
  A    A1   a   1   1
       B2   d   4   4
            e   5   5
  B    A1   c   3   3
       A2   f   6   6
       B1   b   2   2

私の質問は、サブレベルでの重複を許可する方法で MultiIndex を構成するにはどうすればよいですか?

4

1 に答える 1

1

pivot* を直接実行するのではなくset_index(これは両方の例で機能します):

In [11]: df
Out[11]:
  h1 main  h3 sub  h5
0  a    A   1  A1   1
1  b    B   2  B1   2
2  c    B   3  A1   3
3  d    A   4  B2   4
4  e    A   5  B2   5
5  f    B   6  A2   6

In [12]: df.set_index(['main', 'sub'])
Out[12]:
         h1  h3  h5
main sub
A    A1   a   1   1
B    B1   b   2   2
     A1   c   3   3
A    B2   d   4   4
     B2   e   5   5
B    A2   f   6   6

*とにかく、ここで実際にピボットを行っているわけではありません。上記の場合にたまたま機能するだけです。

于 2013-07-06T07:49:46.003 に答える