Python 使用非唯一索引重塑数据帧

Python 使用非唯一索引重塑数据帧,python,pandas,Python,Pandas,我有以下数据帧: In [299]: df Out[299]: a b DATE 2017-05-28 15:01:37 0.0 1.0 2017-05-28 15:01:39 1.0 0.0 2017-05-28 15:01:39 1.0 0.0 2017-05-28 15:01:39 1.0 0.0 2017-05-28 15:01:39 1.0 0.0 2017-05-28 15:01:39 1.0 0.0 201

我有以下数据帧:

In [299]: df
Out[299]:
                       a    b
DATE
2017-05-28 15:01:37  0.0  1.0
2017-05-28 15:01:39  1.0  0.0
2017-05-28 15:01:39  1.0  0.0
2017-05-28 15:01:39  1.0  0.0
2017-05-28 15:01:39  1.0  0.0
2017-05-28 15:01:39  1.0  0.0
2017-05-28 15:01:42  1.0  0.0
2017-05-28 15:02:10  1.0  0.0
2017-05-28 15:02:14  0.0  1.0
2017-05-28 15:02:23  0.0  1.0
2017-05-28 15:02:28  1.0  0.0
2017-05-28 15:02:34  0.0  1.0
2017-05-28 15:02:34  0.0  1.0
我可以通过执行以下操作来获得我想要的形状:

In [300]: xa = df.groupby(df.index).apply(lambda x: x['a'].values)

In [301]: xb = df.groupby(df.index).apply(lambda x: x['b'].values)

In [302]: ya = pd.DataFrame(xa.tolist(), index=xa.index)

In [303]: yb = pd.DataFrame(xb.tolist(), index=xb.index)

In [304]: new_df = pd.concat([ya, yb], axis=1, keys=['a', 'b'])

In [305]: new_df
Out[305]:
                       a                        b
                       0    1    2    3    4    0    1    2    3    4
DATE
2017-05-28 15:01:37  0.0  NaN  NaN  NaN  NaN  1.0  NaN  NaN  NaN  NaN
2017-05-28 15:01:39  1.0  1.0  1.0  1.0  1.0  0.0  0.0  0.0  0.0  0.0
2017-05-28 15:01:42  1.0  NaN  NaN  NaN  NaN  0.0  NaN  NaN  NaN  NaN
2017-05-28 15:02:10  1.0  NaN  NaN  NaN  NaN  0.0  NaN  NaN  NaN  NaN
2017-05-28 15:02:14  0.0  NaN  NaN  NaN  NaN  1.0  NaN  NaN  NaN  NaN
2017-05-28 15:02:23  0.0  NaN  NaN  NaN  NaN  1.0  NaN  NaN  NaN  NaN
2017-05-28 15:02:28  1.0  NaN  NaN  NaN  NaN  0.0  NaN  NaN  NaN  NaN
2017-05-28 15:02:34  0.0  0.0  NaN  NaN  NaN  1.0  1.0  NaN  NaN  NaN

有没有更有效的方法来获得相同的结果?

cumcount

df.set_index(df.groupby(level='DATE').cumcount(), append=True).unstack()

                       a                        b                    
                       0    1    2    3    4    0    1    2    3    4
DATE                                                                 
2017-05-28 15:01:37  0.0  NaN  NaN  NaN  NaN  1.0  NaN  NaN  NaN  NaN
2017-05-28 15:01:39  1.0  1.0  1.0  1.0  1.0  0.0  0.0  0.0  0.0  0.0
2017-05-28 15:01:42  1.0  NaN  NaN  NaN  NaN  0.0  NaN  NaN  NaN  NaN
2017-05-28 15:02:10  1.0  NaN  NaN  NaN  NaN  0.0  NaN  NaN  NaN  NaN
2017-05-28 15:02:14  0.0  NaN  NaN  NaN  NaN  1.0  NaN  NaN  NaN  NaN
2017-05-28 15:02:23  0.0  NaN  NaN  NaN  NaN  1.0  NaN  NaN  NaN  NaN
2017-05-28 15:02:28  1.0  NaN  NaN  NaN  NaN  0.0  NaN  NaN  NaN  NaN
2017-05-28 15:02:34  0.0  0.0  NaN  NaN  NaN  1.0  1.0  NaN  NaN  NaN