Question

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

Was it helpful?

Solution

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top