0

これは、 pandas pivot dataframe to 3d data への返信のフォローアップです。後でインデックスを再作成する必要がありました (Panel ラベルとそれに応じて要素の異なる並べ替えを取得し、欠落している NaN を入力します)。ラベル)。

パネルのすべての軸に対して 1 つのステップで 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 番目の項目の再インデックスの結果 (不足しているエントリの埋め合わせを含む) を調べてみましょう。

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 が 2 つのステップに分割されると、期待される結果が取得されます。

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]

最後の 2 行で出力が異なるのはなぜですか?

解決済み(サンクス ジェフ!):

これは pandas 0.13.1 で修正されたバグです (0.13.0 では修正されていません)。

更新すると問題が解決します。

以下の Jeff のコメントとgithub バグ レポートを参照してください。

4

1 に答える 1

0

これは pandas 0.13.1 で修正されたバグです (0.13.0 では修正されていません)。

更新すると問題が解決します。

質問に対する Jeff のコメントとgithub バグ レポートを参照してください。

于 2014-02-14T05:23:36.320 に答える