【问题标题】:pandas Panel 'iterrows' (iterate through major axis)pandas Panel 'iterrows'(遍历主轴)
【发布时间】:2016-11-20 06:22:12
【问题描述】:
我有一个看起来像这样的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.iterrows 或numpy 迭代器来有效地复制此功能?
谢谢。
【问题讨论】:
标签:
python
pandas
iterator
【解决方案1】:
我会这样做:
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()
【解决方案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]