pandas面板'iterrows'(沿主轴迭代)

4
我有一个看起来像这样的 pandas 面板:
import pandas as pd
import numpy as np
P = pd.Panel(np.arange(90).reshape(5,6,3))

我希望创建一个沿着主轴的生成器,类似于pd.DataFrame.iterrows,使每次调用next时返回一个元组,其中包含当前主轴索引和形状为(P.shape[0], P.shape[2])pd.DataFrame。这个功能在pandas中是否已经可用?如果不可用,是否有一种方法可以使用pd.DataFrame.iterrowsnumpy迭代器来有效地复制此功能?
谢谢。
2个回答

2

这是你想要的吗?

In [176]: [i for i in P.iteritems()]
Out[176]:
[(0,     0   1   2
  0   0   1   2
  1   3   4   5
  2   6   7   8
  3   9  10  11
  4  12  13  14
  5  15  16  17), (1,     0   1   2
  0  18  19  20
  1  21  22  23
  2  24  25  26
  3  27  28  29
  4  30  31  32
  5  33  34  35), (2,     0   1   2
  0  36  37  38
  1  39  40  41
  2  42  43  44
  3  45  46  47
  4  48  49  50
  5  51  52  53), (3,     0   1   2
  0  54  55  56
  1  57  58  59
  2  60  61  62
  3  63  64  65
  4  66  67  68
  5  69  70  71), (4,     0   1   2
  0  72  73  74
  1  75  76  77
  2  78  79  80
  3  81  82  83
  4  84  85  86
  5  87  88  89)]

或者:

In [174]: [print(i[1]) for i in P.iteritems()]
    0   1   2
0   0   1   2
1   3   4   5
2   6   7   8
3   9  10  11
4  12  13  14
5  15  16  17
    0   1   2
0  18  19  20
1  21  22  23
2  24  25  26
3  27  28  29
4  30  31  32
5  33  34  35
    0   1   2
0  36  37  38
1  39  40  41
2  42  43  44
3  45  46  47
4  48  49  50
5  51  52  53
    0   1   2
0  54  55  56
1  57  58  59
2  60  61  62
3  63  64  65
4  66  67  68
5  69  70  71
    0   1   2
0  72  73  74
1  75  76  77
2  78  79  80
3  81  82  83
4  84  85  86
5  87  88  89
Out[174]: [None, None, None, None, None]

2
我会这样做:

for m, df in P.to_frame().unstack().iterrows():
    print m
    print df.unstack()

更好的是:
for i, item in P.swapaxes(0, 1).iteritems():
    print i
    print item

解决方案

P.swapaxes(0, 1).iteritems()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接