2017-07-18 112 views
1

一個數據幀我有以下數據框:重塑與非唯一索引

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 

有沒有更有效的方法來獲得相同的結果?

回答

2

追加與索引水平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