pandas Panel' iterrows' (遍历主轴)

时间:2016-07-17 16:08:23

标签: python pandas iterator

我有一个pandas面板,如下所示:

import pandas as pd
import numpy as np
P = pd.Panel(np.arange(90).reshape(5,6,3))

我想沿着主轴创建一个生成器,类似于pd.DataFrame.iterrows,这样在每次调用时,next都会返回一个包含当前主轴索引和pd.DataFrame的元组。形状(P.shape[0], P.shape[2])。此功能是否已在pandas中提供?如果没有,有没有办法使用pd.DataFrame.iterrowsnumpy迭代器来有效地复制此功能?

感谢。

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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()