这是我对pandas pivot dataframe to 3d data的回复的后续行动,后来我需要重新索引(相应地对面板标签和元素进行不同的排序,并填写缺失的 NaN标签)。
reindex(ing) 在面板的所有轴上一步完成时会导致“错误”结果。
让我以人工数据为例:
In [1]: import pandas as pd
In [2]: df_dict = {'data': {0: 3.0,
...: 1: 3.0,
...: 2: 6.0,
...: 3: 8.0,
...: 4: 9.0,
...: 5: 1.0,
...: 6: 4.0,
...: 7: 0.0,
...: 8: 2.0,
...: 9: 3.0},
...: 'x': {0: 0, 1: 1, 2: 2, 3: 2, 4: 5, 5: 5, 6: 5, 7: 7, 8: 7, 9: 7},
...: 'y': {0: 3, 1: 7, 2: 5, 3: 6, 4: 4, 5: 6, 6: 6, 7: 0, 8: 2, 9: 8},
...: 'z': {0: 6, 1: 0, 2: 3, 3: 9, 4: 1, 5: 2, 6: 6, 7: 5, 8: 9, 9: 0}}
In [3]: df = pd.DataFrame(df_dict)
In [4]: df.set_index(['x','y','z'], inplace=True)
In [5]: df = df['data'].unstack()
In [6]: data_panel = df.to_panel()
现在让我们检查第 4 项的 reindex (包括填充缺失条目)的结果,它最初根本没有值:
In [7]: data_panel.reindex(items=range(11), minor_axis=range(11), major_axis=range(11))[4]
Out[7]:
0 1 2 3 4 5 6 7 8 9 10
0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN NaN 8 NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
5 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
6 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
7 NaN NaN 2 NaN NaN NaN NaN NaN NaN NaN NaN
8 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
9 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
10 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
[11 rows x 11 columns]
当 reindex 分两步拆分时,检索到预期的结果:
In [8]: data_panel.reindex(items=range(11)).reindex(minor_axis=range(11), major_axis=range(11))[4]
Out[8]:
0 1 2 3 4 5 6 7 8 9 10
0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
5 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
6 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
7 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
8 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
9 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
10 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
[11 rows x 11 columns]
为什么最后两行会导致不同的输出?
已解决(感谢杰夫!):
这是一个在 pandas 0.13.1 中修复的错误(虽然不是在 0.13.0 中)。
更新解决了这个问题。
请参阅下面 Jeff 的评论以及github 错误报告