문제

This is a follow-up on my reply to pandas pivot dataframe to 3d data, where later I needed to re-index (get a different sorting of the Panel labels and of the elements accordingly, as well as filling in with NaNs of the missing labels).

reindex(ing) results in a "wrong" result when done on all axes of the Panel in one step.

Let me exemplify on artificial data:

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()

Now let's examine the result of reindex (including the filling of missing entries) on the 4th item, which originally did not have values at all:

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]

When reindex is split in two steps, the expected result is retrieved:

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]

Why do the two last lines result in different outputs?

Resolved (thanx Jeff!):

This is a bug which was fixed in pandas 0.13.1 (though not in 0.13.0).

Updating resolves the issue.

See Jeff's comments bellow as well as the github bug report

도움이 되었습니까?

해결책

This is a bug which was fixed in pandas 0.13.1 (though not in 0.13.0).

Updating resolves the issue.

See Jeff's comments to the question as well as the github bug report

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top